Python numpy.digitize函数方法的使用

NumPy(Numerical Python的缩写)是一个开源的Python科学计算库。使用NumPy,就可以很自然地使用数组和矩阵。NumPy包含很多实用的数学函数,涵盖线性代数运算、傅里叶变换和随机数生成等功能。本文主要介绍一下NumPy中digitize方法的使用。

numpy.digitize

numpy.digitize(x, bins, right=False)     [source]

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

如果x中的值超出了bins的边界,则适当地返回0或len(bins)。

参数 :

x :array_like

要合并的输入数组。在NumPy 1.10.0之前,

此数组必须是一维的,但现在可以具有任何形状。

bins :array_like

bins数组。它必须是一维且单调的。

right :bool, 可选

指示间隔是包括右边还是左边的边沿。

默认行为是(right == False),指示间隔不包括右边缘。

在这种情况下,左边的bin端是开放的,

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

返回值 :

indices :ndarray of ints

输出与x形状相同的索引数组。

Raises :

ValueError

如果bins不是单调的。

TypeError

输入的类型是否复杂。

Notes

如果x中的值超出了bin范围,则尝试使用数字化返回的索引对bin进行索引将导致IndexError。

1.10.0版中的新功能。

np.digitize是根据np.searchsorted实现的。这意味着使用二进制搜索对值进行bin,与之前的线性搜索相比,对于更大数量的bins,缩放比例要好得多。它还消除了对输入数组为一维的要求。

对于单调_increasing_ bins,以下内容等效:

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

请注意,随着参数顺序的颠倒,侧面也必须相同。searchsorted调用稍快一些,因为它不执行任何单调性检查。也许更重要的是,它支持所有dtype。

例子

>>> 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])
推荐阅读
cjavapy编程之路首页