如何使用Numpy无循环实现数组a[i+j]到矩阵A[i,j]的映射?
实现方案
完全可以通过Numpy的向量化操作实现,无需显式编写for循环,运行效率远高于嵌套循环实现,尤其适合大尺寸矩阵的生成场景。
实现的核心逻辑是利用Numpy的广播机制直接生成索引矩阵,再通过索引批量取值得到目标矩阵,示例代码如下:
import numpy as np a = np.random.rand(3) # 定义目标矩阵的行数m、列数n m, n = 2, 2 # 生成对应维度的行索引矩阵i和列索引矩阵j i, j = np.indices((m, n)) # 直接按规则索引数组a得到矩阵A A = a[i + j]
如果你的Numpy版本 >= 1.20.0,也可以用滑动窗口接口实现更高的内存效率,代码如下:
A = np.lib.stride_tricks.sliding_window_view(a, window_shape=n)[:m]
注意事项
两种实现都要求数组a的长度至少为m + n - 1,避免出现索引越界问题。
内容的提问来源于stack exchange,提问作者Thomas Wagenaar
相关产品推荐
相关产品推荐

