首页 >后端开发 >Python教程 >如何使用高级 Numpy 索引高效滚动矩阵行?

如何使用高级 Numpy 索引高效滚动矩阵行?

DDD
DDD原创
2024-10-21 13:40:03473浏览

How to Efficiently Roll Matrix Rows with Advanced Numpy Indexing?

使用 Numpy 高级索引进行高效矩阵行滚动

问题陈述:

给定一个矩阵和一个滚动值数组,任务是根据相应的滚动值独立滚动矩阵的每一行。例如:

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

r = np.array([2, 0, -1])

expected_result = np.array([np.roll(row, x) for row,x in zip(A, r)])

# [[0 0 4]
#  [1 2 3]
#  [0 5 0]]

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

独立滚动矩阵行的有效方法是利用 Numpy 的高级索引功能:

<code class="python">import numpy as np

rows, column_indices = np.ogrid[:A.shape[0], :A.shape[1]]

# Ensure negative shift to keep column_indices valid
r[r < 0] += A.shape[1]
column_indices = column_indices - r[:, np.newaxis]

result = A[rows, column_indices]</code>

解释:

  • 使用 np.ogrid 创建索引网格,表示矩阵的行和列。
  • 调整滚动值以确保负移位,从而产生有效的列索引。
  • 从列索引网格中减去滚动值,沿行广播滚动值。
  • 使用高级索引检索滚动值原始矩阵 A 中的元素。

这种方法允许高效且简洁的行滚动,绕过显式 for 循环并利用 Numpy 强大的矢量化运算。是否是最快的方法取决于数组尺寸和具体的系统配置。

以上是如何使用高级 Numpy 索引高效滚动矩阵行?的详细内容。更多信息请关注PHP中文网其他相关文章!

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