我使用以下代码将数组数字化为16个bin:
numpy.digitize(array, bins=numpy.histogram(array, bins=16)[1])
我希望输出在[1,16]范围内,因为有16个分档。但是,返回数组中的一个值是17.如何解释?
答案 0 :(得分:6)
这实际上记录了numpy.digitize()
的行为:
返回的每个索引
i
都是bins[i-1] <= x < bins[i]
ifbins
单调增加,或bins[i-1] > x >= bins[i]
ifbins
单调递减。如果x
中的值超出了bins
1}},0
或len(bins)
的范围将视情况返回。
因此,在您的情况下,0
和17
也是有效的返回值(请注意numpy.histogram()
返回的bin数组的长度为17
)。 numpy.histogram()
返回的区域涵盖范围array.min()
至array.max()
。文档中给出的条件显示array.min()
属于第一个bin,而array.max()
位于最后一个bin之外 - 这就是为什么0
不在输出中,而17是。< / p>
答案 1 :(得分:2)
numpy.histogram()
生成bin edge 的数组,其中有(number of bins)+1
。
答案 2 :(得分: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,频段的右=真强>)
数组([1,2,3,4,4])