如何将2x6的numpy二维数组转换为6x6分块对角矩阵?
将2x6 NumPy数组转换为6x6分块对角矩阵
首先定义原始数组:
import numpy as np x = np.array([[0,1,2,3,4,5],[6,7,8,9,10,11]])
方法一:使用Scipy的block_diag(简洁高效)
通过scipy.linalg.block_diag可以直接将拆分后的子块组合成分块对角矩阵:
from scipy.linalg import block_diag # 把2x6数组拆分为3个2x2的子块 block1 = x[:, :2] block2 = x[:, 2:4] block3 = x[:, 4:] # 构造分块对角矩阵 result = block_diag(block1, block2, block3)
方法二:纯NumPy实现(无需额外库)
如果不想依赖Scipy,可以手动初始化全零矩阵并填充对角块:
# 创建6x6的全零矩阵 result = np.zeros((6, 6), dtype=x.dtype) # 依次填充三个2x2的对角块 result[:2, :2] = x[:, :2] result[2:4, 2:4] = x[:, 2:4] result[4:, 4:] = x[:, 4:]
输出结果
执行以上代码后,result即为目标6x6分块对角矩阵:
[[ 0 1 0 0 0 0] [ 6 7 0 0 0 0] [ 0 0 2 3 0 0] [ 0 0 8 9 0 0] [ 0 0 0 0 4 5] [ 0 0 0 0 10 11]]
内容的提问来源于stack exchange,提问作者XYZ
相关产品推荐
相关产品推荐

