我正在使用以下代码将数组数字化成16个箱:

numpy.digitize(array, bins=numpy.histogram(array, bins=16)[1])

我希望输出在[1,16]范围内,因为有16个垃圾箱。但是,返回数组中的值之一是17。如何解释?

有帮助吗?

解决方案

这实际上是记录的行为 numpy.digitize():

每个索引 i 返回的是 bins[i-1] <= x < bins[i] 如果 bins 单调增加,或者 bins[i-1] > x >= bins[i] 如果 bins 单调减少。如果值在 x 超出了 bins, 0 或者 len(bins) 被适当返回。

因此,就您而 017 也是有效的返回值(请注意,bin数组返回 numpy.histogram() 有长度 17)。垃圾箱返回 numpy.histogram() 覆盖范围 array.min()array.max(). 。文档中给出的条件表明 array.min() 属于第一个垃圾箱 array.max() 躺在最后一个垃圾箱之外 - 这就是为什么 0 不在输出中,而17为。

其他提示

numpy.histogram() 产生垃圾箱 边缘, ,其中有 (number of bins)+1.

在Numpy版本1.8。中,您可以选择是否要numpy.digitize考虑关闭或打开的间隔。以下是一个示例(从 http://docs.scipy.org/doc/numpy/reference/generated/numpy.digitize.html)

x = np.Array([1.2,10.0,12.4,15.5,20。])

bins = np.Array([0,5,10,15,20])

np.Digitizize(x,bins,,正确= true)

阵列([1,2,3,4,4])

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top