如何在Python中将两个2D数组合并到下面?

时间:2018-06-02 17:33:28

标签: python arrays numpy matrix

假设我有2个2D数组,如下所示:

A = [[1, 2],
     [3, 4]]

B = [[5, 6, 7],
     [8, 9, 8],
     [7, 6, 5]]

是否存在将A和B组合成C的numpy函数,如下所示?

C = [[1, 2, 0, 0, 0],
     [3, 4, 0, 0, 0],
     [0, 0, 5, 6, 7],
     [0, 0, 8, 9, 8],
     [0, 0, 7, 6, 5]]

由于

2 个答案:

答案 0 :(得分:3)

如果您希望进行许多线性代数运算,NumPy / SciPy将成为您的朋友。对于创建块对角矩阵的特殊问题,scipy.linalg.block_diag可以节省时间:

In [14]: from scipy.linalg import block_diag

In [16]: A = [[1, 2],
    ...:      [3, 4]]
    ...:

In [17]: B = [[5, 6, 7],
    ...:      [8, 9, 60],
    ...:      [10, 20, 0]]
    ...:

In [18]: block_diag(A, B)
Out[18]:
array([[ 1,  2,  0,  0,  0],
       [ 3,  4,  0,  0,  0],
       [ 0,  0,  5,  6,  7],
       [ 0,  0,  8,  9, 60],
       [ 0,  0, 10, 20,  0]], dtype=int32)

否则(编辑:注意到原始形式的问题实际上没有指定所需的解决方案涉及NumPy),如果你只想用vanilla Python做,假设所有块都是正方形你可以做类似< / p>

[a + [0]*len(B) for a in A] + [[0]*len(A) + b for b in B]

答案 1 :(得分:0)

你可以开发自己的程序来做到这一点,不应该太困难。

以下是一些开始步骤:

  1. 前面在A的所有元素中追加0,然后在B的所有元素中追加0,以使它们的长度相等。

  2. 然后只需在结果矩阵中填入A和B的值。