我使用以下代码来阵列数字化成16个二进制位:numpy.digitize返回值超出范围?
numpy.digitize(array, bins=numpy.histogram(array, bins=16)[1])
我期望输出是在范围[1,16],因为有16个二进制位。但是,返回数组中的一个值是17.这怎么解释?
我使用以下代码来阵列数字化成16个二进制位:numpy.digitize返回值超出范围?
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
也是有效的返回值(请注意,由numpy.histogram()
返回的箱阵列具有长度17
)。由numpy.histogram()
返回的箱子覆盖范围array.min()
至array.max()
。文档中给出的条件显示array.min()
属于第一个bin,而array.max()
位于最后一个bin之外 - 这就是为什么0
不在输出中,而17是。
numpy.histogram()
产生一个bin 边缘的数组,其中有(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])
仓= np.array([0,5,10, 15,20])
np.digitize(X,频段右=真)
阵列([1,2,3,4,4])
嗯,我知道关于数字化()的边缘情况行为。但是,由于我使用直方图()来创建垃圾箱,是不是所有值都应该位于垃圾箱内? – sandesh247 2010-12-04 23:18:23