numpy.digitize #
- 麻木的。数字化( x , bins , right = False ) [来源] #
返回输入数组中每个值所属的 bin 的索引。
正确的
垃圾箱的顺序
返回的索引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
len(bins)
的范围,则根据需要返回0 或。- 参数:
- x类似数组
要分箱的输入数组。在 NumPy 1.10.0 之前,该数组必须是一维的,但现在可以具有任何形状。
- bins类似数组
垃圾箱阵列。它必须是一维且单调的。
- 右布尔值,可选
指示间隔是否包括右侧或左侧 bin 边缘。默认行为是 (right==False),指示间隔不包括右边缘。在这种情况下,左 bin 端是开放的,即 bins[i-1] <= x < bins[i] 是单调递增 bin 的默认行为。
- 返回:
- 整数索引 ndarray
输出索引数组,形状与x相同。
- 加薪:
- 值错误
如果bin不是单调的。
- 类型错误
如果输入的类型很复杂。
也可以看看
笔记
如果x中的值超出 bin 范围,则尝试使用返回的索引对bin
digitize
进行索引将导致 IndexError。1.10.0 版本中的新增内容。
np.digitize是根据np.searchsorted实现的。这意味着使用二分搜索对值进行分箱,与之前的线性搜索相比,对于更多数量的箱来说,它的扩展性要好得多。它还消除了输入数组为一维的要求。
对于单调_increasing_ bins,以下是等效的:
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])