假设我有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]]
由于
答案 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)
你可以开发自己的程序来做到这一点,不应该太困难。
以下是一些开始步骤:
前面在A的所有元素中追加0,然后在B的所有元素中追加0,以使它们的长度相等。
然后只需在结果矩阵中填入A和B的值。