dask.array.digitize
dask.array.digitize¶
- dask.array.digitize(a, bins, right=False)[源代码]¶
返回输入数组中每个值所属的箱子的索引。
此文档字符串是从 numpy.digitize 复制而来。
Dask 版本可能存在一些不一致性。
right
箱子的顺序
返回的索引 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 的范围,则根据情况返回 0 或
len(bins)
。- 参数
- xarray_like (Dask 中不支持)
要分箱的输入数组。在 NumPy 1.10.0 之前,这个数组必须是 1 维的,但现在可以有任意形状。
- binsarray_like
箱数组。它必须是单维且单调的。
- 右bool, 可选
指示区间是否包含右边界或左边界。默认行为是 (right==False),表示区间不包含右边界。在这种情况下,左边界是开放的,即,对于单调递增的区间,默认行为是 bins[i-1] <= x < bins[i]。
- 返回
- 索引int 的 ndarray
输出一个索引数组,其形状与 x 相同。
- Raises
- ValueError
如果 bins 不是单调的。
- 类型错误
如果输入的类型是复杂的。
参见
注释
如果 x 中的值超出了 bin 范围,尝试使用 digitize 返回的索引来索引 bins 将会导致 IndexError。
1.10.0 新版功能.
numpy.digitize 是基于 numpy.searchsorted 实现的。这意味着使用二分搜索来对值进行分箱,这对于较大数量的分箱来说,比之前的线性搜索扩展性更好。它还去除了输入数组必须是一维的要求。
对于单调*递增*的 bins,以下是等价的:
np.digitize(x, bins, right=True) np.searchsorted(bins, x, side='left')
注意,由于参数的顺序被反转,侧面也必须反转。searchsorted 调用稍微快一些,因为它不进行任何单调性检查。也许更重要的是,它支持所有数据类型。
示例
>>> import numpy as np >>> 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])