如果所有矩阵都具有相同的维度,您可以使用:
np.array([a,b,c]).transpose(1,2,0).reshape(3,-1)
或者一个通用函数来合并n个矩阵:
def merge(*args):
(m,_) = args[0].shape
return np.array(args).transpose(1,2,0).reshape(m,-1)
(并使用merge(a,b,c) 调用它)
您甚至可以让它适用于任意维度,其中:
def merge_arbitrary(*args):
(*m,_) = args[0].shape
return np.array(args).transpose(tuple(range(1,len(m)+2))+(0,)). \
reshape(m+[-1])
代码的工作原理如下。我们首先构造一个 3×3×3 的矩阵,其形状如下:
array([[[ a00, a01, a02],
[ a10, a11, a12],
[ a20, a21, a22]],
[[ b00, b01, b02],
[ b10, b11, b12],
[ b20, b21, b22]],
[[ c00, c01, c02],
[ c10, c11, c12],
[ c20, c21, c22]]])
接下来我们创建一个transpose(1,2,0),这样现在[aij,bij,cij] 是最低维度。所以从现在开始矩阵有形状:
array([[[a00, b00, c00],
[a01, b01, c01],
[a02, b02, c02]],
[[a10, b10, c10],
[a11, b11, c11],
[a12, b12, c12]],
[[a20, b20, c20],
[a21, b21, c21],
[a22, b22, c22]]])
最后通过调用reshape(3,-1),我们“删除”最低维度并连接:
array([[a00, b00, c00, a01, b01, c01, a02, b02, c02],
[a10, b10, c10, a11, b11, c11, a12, b12, c12],
[a20, b20, c20, a21, b21, c21, a22, b22, c22]])