numpy.
digitize
返回输入数组中每个值所属的容器的索引。
right
垃圾桶的顺序
返回索引 i 满足
False
增加的
bins[i-1] <= x < bins[i]
True
bins[i-1] < x <= bins[i]
递减
bins[i-1] > x >= bins[i]
bins[i-1] >= x > bins[i]
如果值在 x 超出了 bins 0或 len(bins) 视情况返回。
len(bins)
要分块的输入数组。在numpy 1.10.0之前,这个数组必须是一维的,但现在可以有任何形状。
容器数组。它必须是一维的和单调的。
指示间隔是包括右侧还是左侧肥料箱边缘。默认行为是(right==false),表示间隔不包括右边缘。在这种情况下,左侧仓端打开,即仓 [i-1] <x>箱 [i] 是单调递增的垃圾箱的默认行为。
索引的输出数组,形状与 x .
如果 bins 不是单调的。
如果输入的类型很复杂。
参见
bincount
histogram
unique
searchsorted
笔记
如果值在 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])
numpy.testing