【发布时间】:2014-01-20 18:38:21
【问题描述】:
我在将列表项排序到垃圾箱时遇到问题。我有两个列表,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
因为空垃圾箱。我该如何解决?我还在numpy.digitize 中尝试了right=True/False,但没有成功。我认为最好先删除三个列表bin_centers、digitized 和bins 中的条目,然后再执行计算中值的列表理解。但我不知道该怎么做,如何找出哪些垃圾箱是空的,然后从这些列表中删除什么以及如何删除。
有任何想法吗?谢谢!
【问题讨论】:
-
这是怎么回事?
X和Y持有什么?X中的值与Y中的值在什么意义上对应? -
它们包含什么数字基本上是任意的,只要每个数字x都属于一个值y,那么就有(x1, y1), (x2, y2)等对。在我的例子中,X 包含幅度,Y 包含每个 x 值的幅度偏差。绘制 X/Y 散点图。