如何用Python/Numpy便捷合并四个矩阵?附MATLAB实现示例
在NumPy中实现MATLAB风格的分块矩阵拼接
嘿,这个需求我太熟了!在NumPy里实现你要的这种分块矩阵拼接,有好几种直观又简便的方法,其中甚至有和MATLAB语法几乎对齐的写法,我给你一一拆解:
首先先把你的四个矩阵用NumPy定义出来:
import numpy as np a = np.array([[1, 1], [1, 1]]) b = np.array([[2, 2], [2, 2]]) c = np.array([[3, 3], [3, 3]]) d = np.array([[4, 4], [4, 4]])
方法1:用np.block()(最贴合MATLAB写法)
这个方法完全对应MATLAB里的[a b; c d]语法,直接按分块的结构传入嵌套列表就行,非常直观:
m = np.block([[a, b], [c, d]])
np.block()就是专门为分块矩阵拼接设计的函数,把你想要的矩阵排布用嵌套列表描述出来就行,新手友好度拉满。
方法2:hstack + vstack组合
如果想分步拼接,可以先横向拼接每行的矩阵,再纵向拼接结果:
# 横向拼接a和b,c和d top_row = np.hstack([a, b]) bottom_row = np.hstack([c, d]) # 纵向拼接上下两行 m = np.vstack([top_row, bottom_row])
np.hstack():horizontal stack,沿着列方向拼接矩阵np.vstack():vertical stack,沿着行方向拼接矩阵
这种分步方式适合需要对中间结果做额外处理的场景。
方法3:灵活的np.concatenate()
用np.concatenate()可以通过指定axis参数来控制拼接方向,逻辑和上面的组合方法一致,但适配性更强:
# axis=1 表示沿列方向(横向)拼接 top_row = np.concatenate([a, b], axis=1) bottom_row = np.concatenate([c, d], axis=1) # axis=0 表示沿行方向(纵向)拼接 m = np.concatenate([top_row, bottom_row], axis=0)
这个方法在处理高维矩阵拼接时更通用,能应对更复杂的拼接需求。
验证结果
不管用哪种方法,最终得到的m都是你想要的结果:
print(m) # 输出: # [[1 1 2 2] # [1 1 2 2] # [3 3 4 4] # [3 3 4 4]]
内容的提问来源于stack exchange,提问作者Nick X Tsui
相关产品推荐
相关产品推荐

