numpy.digitize返回超出范围的值?

时间:2010-12-04 18:37:22

标签: python statistics numpy binning

我使用以下代码将数组数字化为16个bin:

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

我希望输出在[1,16]范围内,因为有16个分档。但是,返回数组中的一个值是17.如何解释?

3 个答案:

答案 0 :(得分:6)

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

  

返回的每个索引i都是bins[i-1] <= x < bins[i] if   bins单调增加,或bins[i-1] > x >= bins[i] if   bins单调递减。如果x中的值超出了bins   0或len(bins)的范围将视情况返回。

因此,在您的情况下,017也是有效的返回值(请注意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])