首页  >  文章  >  后端开发  >  如何用另一个 Numpy 数组索引一个 Numpy 数组?

如何用另一个 Numpy 数组索引一个 Numpy 数组?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-12 02:24:01633浏览

How to Index One Numpy Array by Another?

在 Numpy 中用另一个数组索引一个数组

考虑两个矩阵,AB ,其中 A 包含任意值并且B 保存 A 中元素的索引。任务是根据 B 指定的索引从 A 中提取元素。此索引允许选择性元素检索。

使用高级索引的解决方案:

Numpy 的高级索引使用表达式启用此操作:

A[np.arange(A.shape[0])[:,None], B]

此方法利用从 B 检索的行索引和列索引的组合来检索A.

使用线性索引的解决方案:

另一种方法涉及线性索引:

m, n = A.shape
out = np.take(A, B + n*np.arange(m)[:,None])

这里,mn 代表维度A 以及 np.take() 函数中的操作确保基于 B 的元素正确索引。

示例:

让我们用一个例子来说明这些解决方案示例:

import numpy as np

A = np.array([[2, 4, 5, 3],
              [1, 6, 8, 9],
              [8, 7, 0, 2]])

B = np.array([[0, 0, 1, 2],
              [0, 3, 2, 1],
              [3, 2, 1, 0]])

# Advanced indexing
result1 = A[np.arange(A.shape[0])[:,None], B]

# Linear indexing
m, n = A.shape
result2 = np.take(A, B + n*np.arange(m)[:,None])

print("Result using advanced indexing:")
print(result1)

print("Result using linear indexing:")
print(result2)

输出:

Result using advanced indexing:
[[2 2 4 5]
 [1 9 8 6]
 [2 0 7 8]]

Result using linear indexing:
[[2 2 4 5]
 [1 9 8 6]
 [2 0 7 8]]

以上是如何用另一个 Numpy 数组索引一个 Numpy 数组?的详细内容。更多信息请关注PHP中文网其他相关文章!

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