numpy.digitize

numpy.digitize(x, bins, right=False)[源代码]

返回输入数组中每个值所属的容器的索引。

right

垃圾桶的顺序

返回索引 i 满足

False

增加的

bins[i-1] <= x < bins[i]

True

增加的

bins[i-1] < x <= bins[i]

False

递减

bins[i-1] > x >= bins[i]

True

递减

bins[i-1] >= x > bins[i]

如果值在 x 超出了 bins 0或 len(bins) 视情况返回。

参数
xarray_like

要分块的输入数组。在numpy 1.10.0之前,这个数组必须是一维的,但现在可以有任何形状。

binsarray_like

容器数组。它必须是一维的和单调的。

right可选的布尔

指示间隔是包括右侧还是左侧肥料箱边缘。默认行为是(right==false),表示间隔不包括右边缘。在这种情况下,左侧仓端打开,即仓 [i-1] <x>箱 [i] 是单调递增的垃圾箱的默认行为。

返回
indices铟锡合金

索引的输出数组,形状与 x .

加薪
ValueError

如果 bins 不是单调的。

TypeError

如果输入的类型很复杂。

笔记

如果值在 x 它们是否落在垃圾桶范围之外,试图进行索引? bins 与指数 digitize 返回将导致索引错误。

1.10.0 新版功能.

np.digitize 在以下方面实施 np.searchsorted . 这意味着使用二进制搜索来对值进行装箱,与以前的线性搜索相比,对于较大的装箱数,这种方法的缩放效果更好。它还消除了输入数组为一维的要求。

单调的 _increasing_ ,以下是等效的:

np.digitize(x, bins, right=True)
np.searchsorted(bins, x, side='left')

注意,当参数的顺序颠倒时,边也必须颠倒。这个 searchsorted 调用速度稍快,因为它不做任何单调性检查。也许更重要的是,它支持所有的数据类型。

实例

>>> x = np.array([0.2, 6.4, 3.0, 1.6])
>>> bins = np.array([0.0, 1.0, 2.5, 4.0, 10.0])
>>> inds = np.digitize(x, bins)
>>> inds
array([1, 4, 3, 2])
>>> for n in range(x.size):
...   print(bins[inds[n]-1], "<=", x[n], "<", bins[inds[n]])
...
0.0 <= 0.2 < 1.0
4.0 <= 6.4 < 10.0
2.5 <= 3.0 < 4.0
1.0 <= 1.6 < 2.5
>>> 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)
array([1, 2, 3, 4, 4])
>>> np.digitize(x,bins,right=False)
array([1, 3, 3, 4, 5])