numpy.Digitize返回值超出范围?
-
08-10-2019 - |
题
我正在使用以下代码将数组数字化成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)
被适当返回。
因此,就您而 0
和 17
也是有效的返回值(请注意,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])
不隶属于 StackOverflow