如何将多个numpy数组高效拼接为指定结构的矩阵列表?
解决Numpy数组对应行堆叠的问题
嘿,这个需求用numpy的工具就能轻松搞定,我给你两种实用的方案,其中第二种是更高效的向量化操作,适合处理大规模数据:
方法1:列表推导式 + 垂直堆叠(直观易懂)
先定义好你的三个数组,然后遍历每一行索引,把对应行的三个子数组垂直堆叠起来:
import numpy as np # 初始化你的数组 A = np.array([[1,2,3],[2,3,4]]) B = np.array([[4,5,6],[5,6,7]]) C = np.array([[7,8,9],[8,9,0]]) # 生成目标矩阵列表 Mat = [np.vstack([A[i], B[i], C[i]]) for i in range(A.shape[0])]
解释:
np.vstack本质是np.concatenate(axis=0)的封装,它会把多个数组沿着**垂直方向(行维度)**拼接起来,和你提到的np.concatenate用法本质一致。- 遍历每个行索引
i,取A[i]、B[i]、C[i]这三个行数组,堆叠后就得到一个3行3列的子数组,最终组成你需要的列表结构。
方法2:np.stack 向量化操作(高效无循环)
如果你的数组规模较大,推荐用这个纯numpy向量化的方法,避免Python层面的循环,效率更高:
import numpy as np A = np.array([[1,2,3],[2,3,4]]) B = np.array([[4,5,6],[5,6,7]]) C = np.array([[7,8,9],[8,9,0]]) # 沿着axis=1堆叠三个数组 stacked_array = np.stack([A, B, C], axis=1) # 转换为列表,得到目标结构 Mat = list(stacked_array)
解释:
np.stack([A,B,C], axis=1)会在**第二个维度(axis=1)**上合并三个数组,得到形状为(2, 3, 3)的numpy数组:- 第一个维度:对应原数组的行索引(共2行)
- 第二个维度:对应三个输入数组的索引(共3个数组)
- 第三个维度:原数组的列(共3列)
- 把这个三维数组直接转成列表,每个元素就是一个
(3,3)的子数组,完全符合你要的Mat结构。
验证结果
不管用哪种方法,打印Mat都会得到:
[array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]), array([[2, 3, 4], [5, 6, 7], [8, 9, 0]])]
内容的提问来源于stack exchange,提问作者G.Hanna
相关产品推荐
相关产品推荐

