当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python numpy digitize用法及代码示例


本文简要介绍 python 语言中 numpy.digitize 的用法。

用法:

numpy.digitize(x, bins, right=False)

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

正确的

箱子的顺序

返回的索引 i 满足

False

increasing

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

True

increasing

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

False

decreasing

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

True

decreasing

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

如果值在x超出了范围箱子, 0 或len(bins)酌情返回。

参数

x array_like

要分箱的输入数组。在NumPy 1.10.0 之前,此数组必须是一维的,但现在可以具有任何形状。

bins array_like

箱阵列。它必须是一维且单调的。

right 布尔型,可选

指示间隔是否包括右侧或左侧 bin 边。默认行为是 (right==False),表示区间不包括右边。在这种情况下,左 bin 端是打开的,即 bins[i-1] <= x < bins[i] 是单调递增 bins 的默认行为。

返回

indices 整数数组

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

抛出

ValueError

如果 bins 不是单调的。

TypeError

如果输入的类型很复杂。

注意

如果值在x是这样的,它们落在 bin 范围之外,试图索引箱子与 index digitize返回将导致 IndexError。

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

对于单调_increasing_ bins,以下是等价的:

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

请注意,由于参数的顺序是颠倒的,所以边也必须是颠倒的。 searchsorted 调用稍微快一些,因为它不进行任何单调性检查。也许更重要的是,它支持所有 dtypes。

例子

>>> 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.org大神的英文原创作品 numpy.digitize。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。