numpy.digitize¶
-
numpy.
digitize
(x, bins, right=False)¶ 返回输入数组中每个值所属的bin的索引。
Each index
i
returned is such thatbins[i-1] <= x < bins[i]
if bins is monotonically increasing, orbins[i-1] > x >= bins[i]
if bins is monotonically decreasing. 如果x中的值超出了bin的界限,则适当返回0或len(bins)
。如果right为True,则右边仓关闭,使得索引i
使得bin [i-1] > x bins [i]
或bins [i-1]> = x> bins [i] `if bins分别单调递增或递减。参数: x:array_like
输入要组合的数组。在Numpy 1.10.0之前,这个数组必须是一维的,但现在可以有任何形状。
bin:array_like
数组组。它必须是一维和单调的。
右:bool,可选
指示间隔是否包括右边框或左边框。默认行为是(right == False),表示间隔不包括右边缘。在这种情况下,左端口端是打开的,即bin [i-1]
返回: out:intar的ndarray
输出数组的索引,形状与x相同。
上升: ValueError
如果bin不是单调的。
TypeError
如果输入的类型复杂。
笔记
如果x中的值落在bin范围之外,则尝试使用
digitize
返回的索引将bin编入索引将导致IndexError 。版本1.10.0中的新功能。
np.digitize按照np.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])