我有一个问题,排序清单项目到垃圾箱。我有两个列表,X和Y,以及相应的X和Y值(很明显,这也可能是一个元组列表)。接下来,我需要将X范围分成10个相等的箱子,并将X值和相应的Y值排序到这些箱子中,这样我就知道哪些Y值属于哪个X bin(即每个Y值的X值落入哪个bin中),然后取每个bin中所有Y值的中值。这给了我10个二进制中间值对。在下面的代码中,我还计算了每个箱子的X中心,这在原则上可以正常工作。在
bins = np.linspace(max(X), min(X), 10)
digitized = np.digitize(X, bins)
bin_centers = []
for j in range(len(bins) - 1):
bin_centers.append((bins[j] + bins[j + 1]) / 2.)
bin_means = [np.median(np.asarray(Y)[digitized == j])
for j in range(1, len(bins))]
现在的问题是,有时一个箱子是空的,因为这个箱子里没有X值。在这种情况下
^{pr2}$引发错误
/usr/lib64/python2.6/site-packages/numpy/core/_methods.py:55: RuntimeWarning: Mean of empty slice.
FloatingPointError: invalid value encountered in double_scalars
因为空箱子。我该怎么解决呢?我也尝试了right=True/False
在numpy.digitize
中,但没有成功。我认为在进行计算中值的列表理解之前,最好删除三个列表bin_centers
、digitized
和{
我不太明白这个问题,但这里有一些东西可以让你开始:
此时,您可以执行类似
sorted(Z, key=lambda el: -ord(el[1]))
之类的操作来根据您的条件进行排序。显然这比这个例子更有意义。在最后,为了将块分成等长的部分,我想您可能也希望这样做,请看一下wide variety of possibilities given as answers here。在
如果那不是你想要的,道歉。在
如果您有Scipy,可以拨打scipy.stats.binned_statistic:
收益率
^{pr2}$如果没有SciPy,我想你需要一个列表理解。 正如您所建议的,您可以通过过滤掉那些空的容器来避免运行时警告。您可以使用列表理解中的
if-condition
来完成此操作:还请注意,您看到的错误消息是一个警告,而不是异常。您可以(或者)使用
有一种快速计算u-bin的方法:
可以简化为
比如说
收益率
如果您的目的只是绘制散点图,那么就不必删除nan,因为
matplotlib
无论如何都会忽略它们。在如果你真的想移除nan,那么你可以使用
在上面,我选择使用}中过滤相应位置的nan,那么:
warnings.filterwarnings
来抑制警告。如果您不希望抑制警告,而是希望从bin_medians
和{相关问题 更多 >
编程相关推荐