如何按指定顺序将numpy对称矩阵转换为一维向量
对称矩阵按指定顺序转换为一维数组实现方法
我们需要将对称矩阵按逐行提取下三角(包含对角线)元素的规则,转换为目标顺序的一维数组,示例输入输出如下:
- 输入示例矩阵
import numpy as np m = np.matrix([[11, 21, 31], [21, 22, 32], [31, 32, 33]])
- 期望输出
array([11, 21, 22, 31, 32, 33])
实现方法1:调用numpy内置索引函数(推荐)
np.tril_indices()会默认返回方阵下三角区域(含对角线)的行优先索引,直接用该索引提取元素即可完全匹配需求的输出顺序,实现代码如下:
import numpy as np m = np.matrix([[11, 21, 31], [21, 22, 32], [31, 32, 33]]) # 获取n阶方阵的下三角行列索引 row_ids, col_ids = np.tril_indices(m.shape[0]) # 按索引提取元素并转换为一维数组 res = np.array(m[row_ids, col_ids]).flatten() print(res)
运行后输出结果与预期完全一致。
实现方法2:自定义索引(适配其他自定义顺序需求)
如果后续需要调整为其他自定义提取规则,只需手动构造对应的行列索引对列表,再按索引提取即可,适配当前需求的实现如下:
# 按需求顺序构造行列索引对 custom_index = [(0,0), (1,0), (1,1), (2,0), (2,1), (2,2)] res = np.array([m[i,j] for i,j in custom_index]).flatten()
内容的提问来源于stack exchange,提问作者Tartaglia
相关产品推荐
相关产品推荐

