You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中创建或扩展分块对角矩阵(类单位矩阵)

分块对角矩阵拼接实现方法

你需要将两个子矩阵拼接成指定的分块对角矩阵,本质是构造主对角线为子矩阵、其余位置为0的分块对角矩阵。

已知子矩阵:
第一个2×2子矩阵:

[[1 2], 
 [3 4]]

第二个3×3子矩阵:

[[5 0 0], 
 [0 6 0],
 [0 0 7]]

目标矩阵:

[[1 2 0 0 0],
 [3 4 0 0 0],
 [0 0 5 0 0], 
 [0 0 0 6 0],
 [0 0 0 0 7]]

Python(NumPy)

用NumPy的block函数或Scipy的block_diag都能快速实现:

方法1:使用numpy.block

import numpy as np

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

# 按分块结构拼接
result = np.block([
    [A, np.zeros((A.shape[0], B.shape[1]))],
    [np.zeros((B.shape[0], A.shape[1])), B]
])

print(result)

方法2:使用scipy.linalg.block_diag(更简洁)

from scipy.linalg import block_diag

result = block_diag(A, B)
print(result)

MATLAB

MATLAB直接用内置的blkdiag函数即可:

A = [1 2; 3 4];
B = [5 0 0; 0 6 0; 0 0 7];

result = blkdiag(A, B);
disp(result);

手动构造(通用逻辑)

如果不想用现成函数,核心思路是先创建对应大小的全0矩阵,再把两个子矩阵放到对应位置:

import numpy as np

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

# 初始化全0结果矩阵
result = np.zeros((A.shape[0]+B.shape[0], A.shape[1]+B.shape[1]), dtype=int)
# 把A放到左上角
result[:A.shape[0], :A.shape[1]] = A
# 把B放到右下角
result[A.shape[0]:, A.shape[1]:] = B

print(result)

内容的提问来源于stack exchange,提问作者sxie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 21:18:17