假设我有2 2D阵列如下:
A = [[1, 2],
[3, 4]]
B = [[5, 6, 7],
[8, 9, 8],
[7, 6, 5]]
是否有一个numpy的功能,以A和B合并成C如下?
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 2D阵列如下:
A = [[1, 2],
[3, 4]]
B = [[5, 6, 7],
[8, 9, 8],
[7, 6, 5]]
是否有一个numpy的功能,以A和B合并成C如下?
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]]
谢谢
如果您希望将使得许多线性代数运算, 与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的),如果你只是想用香草Python来做到这一点,假设所有块是正方形的,你可以这样做
[a + [0]*len(B) for a in A] + [[0]*len(A) + b for b in B]
你可以开发自己的程序要做到这一点,应该不会太困难。
这里有一些开始的步骤:
前面附加0在A的所有elemnts和背面追加0在B的所有元素,使它们的长度相等。
然后简单地在所得到的矩阵填写A和B的值。