首页 >后端开发 >Python教程 >如何高效查找 NumPy 数组中多个值的行索引?

如何高效查找 NumPy 数组中多个值的行索引?

Barbara Streisand
Barbara Streisand原创
2024-12-12 18:44:11472浏览

How to Efficiently Find Row Indices of Multiple Values in a NumPy Array?

如何查找 NumPy 数组中多个值的行索引?

NumPy 提供了多种方法来查找 NumPy 数组中指定值的行索引:

方法#1:NumPy广播

result = np.where((X==searched_values[:,None]).all(-1))[1]

方法#2:使用 np.ravel_multi_index 的内存高效方法

dims = X.max(0) + 1
out = np.where(np.in1d(np.ravel_multi_index(X.T,dims),\
                    np.ravel_multi_index(searched_values.T,dims)))[0]

方法#3:内存高效接近与np.searchsorted

dims = X.max(0) + 1
X1D = np.ravel_multi_index(X.T,dims)
searched_valuesID = np.ravel_multi_index(searched_values.T,dims)
sidx = X1D.argsort()
out = sidx[np.searchsorted(X1D,searched_valuesID,sorter=sidx)]

理解 np.ravel_multi_index

np.ravel_multi_index 将多维索引元组转换为网格的线性索引。它假设每一列代表一个维度,并使用网格形状来计算线性索引。

例如,使用 X:

X = np.array([[4, 2],
              [9, 3]])

且 dims = [10, 7],第一行X (4, 2) 的值被转换为线性索引 30。这对应于grid:

dims = X.max(0) + 1 # [10, 7]
np.ravel_multi_index(X.T, dims) # [30, 66]

为唯一线性索引选择尺寸

为了确保唯一线性索引,网格的尺寸应设置为每个轴的最大拉伸输入数组 X。这可以通过将 X 中每列的最大值加 1 来实现。

以上是如何高效查找 NumPy 数组中多个值的行索引?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn