MATLAB多维矩阵转NumPy矩阵:构造309×309分块矩阵
在Python中实现MATLAB风格的分块矩阵拼接
你直接用np.array([[Q,S,P],...])的写法会生成一个3×3×103×103的四维数组,这和你需要的二维分块矩阵完全不是一回事。要实现和MATLABU = [Q S P;S H G;P G E];一致的效果,得用numpy专门处理分块矩阵的np.block()函数。
正确实现代码
假设Q、S、P、H、G、E都是已经定义好的103×103 numpy数组,直接执行以下代码:
import numpy as np # 前提:Q, S, P, H, G, E均为shape=(103, 103)的numpy数组 U = np.block([ [Q, S, P], [S, H, G], [P, G, E] ])
验证结果
运行后用print(U.shape)检查,输出会是(309, 309),完全符合预期。
替代方案(不推荐)
如果不想用np.block(),也可以通过两次np.concatenate()组合实现:
- 先把每一行的三个小矩阵横向拼接:
row1 = np.concatenate([Q, S, P], axis=1) row2 = np.concatenate([S, H, G], axis=1) row3 = np.concatenate([P, G, E], axis=1) - 再把三行纵向拼接成最终矩阵:
U = np.concatenate([row1, row2, row3], axis=0)
只是这种写法不如np.block()简洁直观,优先推荐前者。
内容的提问来源于stack exchange,提问作者maya
相关产品推荐
相关产品推荐

