2010-12-04 69 views
2

我使用以下代码来阵列数字化成16个二进制位:numpy.digitize返回值超出范围?

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

我期望输出是在范围[1,16],因为有16个二进制位。但是,返回数组中的一个值是17.这怎么解释?

回答

5

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

返回的每个指数i是这样的:bins[i-1] <= x < bins[i]如果 bins单调递增,或bins[i-1] > x >= bins[i]如果 bins是单调递减的。如果x中的值超出了bins的 范围,则0len(bins)会根据情况返回。

你的情况

所以,017也是有效的返回值(请注意,由numpy.histogram()返回的箱阵列具有长度17)。由numpy.histogram()返回的箱子覆盖范围array.min()array.max()。文档中给出的条件显示array.min()属于第一个bin,而array.max()位于最后一个bin之外 - 这就是为什么0不在输出中,而17是。

+0

嗯,我知道关于数字化()的边缘情况行为。但是,由于我使用直方图()来创建垃圾箱,是不是所有值都应该位于垃圾箱内? – sandesh247 2010-12-04 23:18:23

2

numpy.histogram()产生一个bin 边缘的数组,其中有(number of bins)+1

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])