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

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

Barbara Streisand
Barbara Streisand原创
2024-12-07 06:16:13188浏览

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

查找 Numpy 数组中多个值的行索引

问题:

我们给定一个 NumPy 数组 X 和一组值 searched_values。目标是确定 X 中与 searched_values 中的每个值相对应的行索引。

例如,对于以下输入数组:

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

searched_values = np.array([[4, 2],
                            [3, 3],
                            [5, 6]])

所需的输出应该是:

[0, 3, 4]

方法#1:NumPy广播

此方法利用 NumPy 广播在 X 与每行 searched_values 之间执行逐元素比较:

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

方法 #2:使用 np 进行内存高效转换.in1d

为了节省内存,我们可以转换每一行将 X 和 searched_values 转换为线性索引等价物,然后应用 np.in1d 进行交集:

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

另一种内存高效转换使用 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 的每一行转换为唯一的线性索引等价物。它对 n 维索引的 2D 数组以及这些索引要映射到的 n 维网格的形状进行操作。

例如,在我们的示例中,X 的每一行代表一个索引元组对于尺寸变暗的 2D 网格。 np.ravel_multi_index 将每个元组映射到唯一的线性索引。

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

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