如何将任意1维Numpy数组重塑为指定结构的下三角矩阵
实现方案
你需要构造的是下三角托普利茨矩阵,有两种常用实现方式:
方法1:纯NumPy实现(无额外依赖)
核心思路是利用索引矩阵判断元素位置,直接按规则赋值:
import numpy as np # 输入一维数组 a = np.array([3, 2, 9, 12]) n = a.shape[0] # 生成行列索引矩阵 row_idx, col_idx = np.indices((n, n)) # 按规则生成矩阵:行索引>=列索引时取a[行-列],否则取0 m = np.where(row_idx >= col_idx, a[row_idx - col_idx], 0)
运行后输出的m和你要求的结构完全一致。
方法2:借助scipy的托普利茨矩阵接口(代码更简洁)
如果你的环境可以安装scipy,直接调用内置的托普利茨矩阵生成方法即可:
import numpy as np from scipy.linalg import toeplitz a = np.array([3, 2, 9, 12]) n = a.shape[0] # 托普利茨矩阵第一列设为a,第一行设为第一个元素后接n-1个0 m = toeplitz(c=a, r=np.pad(a[:1], (0, n-1), constant_values=0))
两种方法都是向量化操作,性能远高于手动循环遍历赋值,适合处理任意长度的输入数组。
内容的提问来源于stack exchange,提问作者MRR
相关产品推荐
相关产品推荐

