我正在使用以下代码将数组数字化为 16 个 bin:
numpy.digitize(array, bins=numpy.histogram(array, bins=16)[1])
我希望输出在 [1, 16] 范围内,因为有 16 个 bin。但是,返回数组中的值之一是 17。这如何解释?
我正在使用以下代码将数组数字化为 16 个 bin:
numpy.digitize(array, bins=numpy.histogram(array, bins=16)[1])
我希望输出在 [1, 16] 范围内,因为有 16 个 bin。但是,返回数组中的值之一是 17。这如何解释?
这实际上是记录的行为numpy.digitize()
:
返回的每个索引
i
都使得bins[i-1] <= x < bins[i]
ifbins
单调递增,或者bins[i-1] > x >= bins[i]
ifbins
单调递减。如果 inx
的值超出 , 的范围bins
,0
则len(bins)
根据需要返回。
因此,在您的情况下,0
并且17
也是有效的返回值(请注意,返回的 bin 数组numpy.histogram()
具有 length 17
)。返回的 binnumpy.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.])
bins = np.array([0,5,10,15,20])
np.digitize(x,bins, right=True )
数组([1, 2, 3, 4, 4])