我在将列表项排序到垃圾箱时遇到问题。我有两个列表,X 和 Y,具有相应的 X 和 Y 值(显然也可以是一个元组列表)。接下来,我需要将 X 范围分成 10 个相等的 bin,并将 X 值和对应的 Y 值排序到这些 bin,这样我就知道哪些 Y 值属于哪个 X bin(即每个 Y 的 X 值落入哪个 bin value),然后取每个 bin 中所有 Y 值的中值。这给了我十个 bin-median 对。原则上,使用以下代码可以正常工作,其中我还计算了每个 bin 的 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))]
现在的问题是有时一个 bin 是空的,因为这个 bin 中没有 X 值。在这种情况下,行
bin_means = [np.median(np.asarray(Y)[digitized == j])
for j in range(1, len(bins))]
引发错误
/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
和之前。bins
但我不知道该怎么做,如何找出哪些垃圾箱是空的,然后从这些列表中删除什么以及如何删除。有任何想法吗?谢谢!