5

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

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

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

4

3 回答 3

8

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

返回的每个索引i都使得bins[i-1] <= x < bins[i]if bins单调递增,或者bins[i-1] > x >= bins[i]if bins单调递减。如果 inx的值超出 , 的范围bins0len(bins)根据需要返回。

因此,在您的情况下,0并且17也是有效的返回值(请注意,返回的 bin 数组numpy.histogram()具有 length 17)。返回的 binnumpy.histogram()覆盖范围array.min()array.max(). 文档中给出的条件显示array.min()属于第一个 bin,而array.max()位于最后一个 bin 之外 - 这就是为什么0不在输出中,而 17 是。

于 2010-12-04T18:48:02.573 回答
2

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

于 2010-12-04T18:47:15.403 回答
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])

于 2014-10-11T18:54:59.607 回答