Самый простой способ: scipy.linalg.block_diag
:
linalg.block_diag(J_plus, J_minus)
Для подхода, основанного на numpy, мы могли бы использовать np.block
. Хотя это определенно не тот способ go, когда речь идет о суммировании нескольких массивов:
px, py = J_plus.shape
mx, my = J_minus.shape
np.block([[J_plus, np.zeros((px, my))],
[np.zeros((py, mx)), J_minus]])
Например:
a = np.arange(16).reshape(4,4)
b = np.arange(24).reshape(4,6)
linalg.block_diag(a, b)
array([[ 0., 1., 2., 3., 0., 0., 0., 0., 0., 0.],
[ 4., 5., 6., 7., 0., 0., 0., 0., 0., 0.],
[ 8., 9., 10., 11., 0., 0., 0., 0., 0., 0.],
[12., 13., 14., 15., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 1., 2., 3., 4., 5.],
[ 0., 0., 0., 0., 6., 7., 8., 9., 10., 11.],
[ 0., 0., 0., 0., 12., 13., 14., 15., 16., 17.],
[ 0., 0., 0., 0., 18., 19., 20., 21., 22., 23.]])