Python 如何从其他几个矩阵创建一个矩阵?

Python 如何从其他几个矩阵创建一个矩阵?,python,numpy,Python,Numpy,我对连接几个矩阵有问题。假设我有四个矩阵A,B,C,D,我想把它们连接起来,得到一个新的矩阵 M = A B C D 如何使用python numpy实现这一点?考虑到所有组件都具有相同的维度,下面是一个示例: >>> A = np.arange(4).reshape(2,2) >>> B, C, D = A*2, (A+1), (A+2) >>> M = np.array([[A,B],[C,D]]) >>> M

我对连接几个矩阵有问题。假设我有四个矩阵A,B,C,D,我想把它们连接起来,得到一个新的矩阵

M = A B
    C D

如何使用python numpy实现这一点?

考虑到所有组件都具有相同的维度,下面是一个示例:

>>> A = np.arange(4).reshape(2,2)
>>> B, C, D = A*2, (A+1), (A+2)
>>> M = np.array([[A,B],[C,D]])
>>> M
array([[[[0, 1],
         [2, 3]],

        [[0, 2],
         [4, 6]]],


       [[[1, 2],
         [3, 4]],

        [[2, 3],
         [4, 5]]]])
或者如果你想要这样的东西:

>>> M = np.concatenate([np.concatenate([A,B],axis = 1),np.concatenate([C,D],axis = 1)],axis = 0)
>>> M
array([[0, 1, 0, 2],
       [2, 3, 4, 6],
       [1, 2, 2, 3],
       [3, 4, 4, 5]])
使用NumPy的和函数,只要两个行数和/或列数匹配,就可以从任何
A
B
C
D
生成
M
。请参见以下示例:

将numpy导入为np
A=np.random.rand(3,2)#(3 x 2)
B=np.random.rand(3,4)#(3 x 4)
C=np.random.rand(4,3)#(4 x 3)
D=np.random.rand(4,3)#(4 x 3)
打印(A,“\n”)
打印(B,“\n”)
打印(C,“\n”)
打印(D,“\n”)
M=np.vstack((np.hstack((A,B)),np.hstack((C,D)))
#(3 x 6)(4 x 6)
#(7 x 6)
打印(M)
输出:

[[0.60220154 0.77067838]
[0.7623169  0.54727146]
[0.20570341 0.56939493]] 
[[0.322524   0.35260186 0.6581785  0.55662823]
[0.32034862 0.68664386 0.96432518 0.03410233]
[0.72779584 0.6705618  0.66460412 0.104223  ]] 
[[0.20194483 0.49971436 0.50618483]
[0.89040491 0.25118623 0.67831283]
[0.30631334 0.69515443 0.70941023]
[0.41324506 0.23127909 0.29241595]] 
[[0.0015009  0.43205507 0.08500188]
[0.48506546 0.46448833 0.61393518]
[0.51163779 0.81914233 0.21293481]
[0.33713576 0.33953848 0.9909197 ]] 
[[0.60220154 0.77067838 0.322524   0.35260186 0.6581785  0.55662823]
[0.7623169  0.54727146 0.32034862 0.68664386 0.96432518 0.03410233]
[0.20570341 0.56939493 0.72779584 0.6705618  0.66460412 0.104223  ]
[0.20194483 0.49971436 0.50618483 0.0015009  0.43205507 0.08500188]
[0.89040491 0.25118623 0.67831283 0.48506546 0.46448833 0.61393518]
[0.30631334 0.69515443 0.70941023 0.51163779 0.81914233 0.21293481]
[0.41324506 0.23127909 0.29241595 0.33713576 0.33953848 0.9909197 ]]
如果
A
/
C
B
/
D
的列数匹配,并且这些连接的行数相等,则可以切换
vstack
hstack


希望有帮助

你能定义一下加入的类型吗?您想将一个矩阵附加到另一个矩阵还是其他矩阵?另请查看
np.block
谢谢!现在我感兴趣的是,如果它们的维度不同怎么办?你可以
连接它们
,只要它们在连接后是相同的。否则,您需要声明一个
zero
数组,然后用索引填充该位置。实际上,您可以执行相同的操作(答案中的第一个方法),而不必担心维度,它将成为
对象
数组。然而,你需要小心这是否是你想要的。