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

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

Barbara Streisand
发布: 2024-12-12 18:44:11
原创
460 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板