Agape Gal&#39;lo - 1 year ago 141
Python Question

# Multiplying matrices by block

I need to multiply matrices of different shapes, M and N with a finite size of MxN.

I think an example will make it more clear:

A (shape: 4x4) =

``````0  3  0  0
0  0  4  0
0  0  0  3
0  0  0  0
``````

B (shape: 7x7) =

``````3  0  0  0  0  0  0
0  2  0  0  0  0  0
0  0  1  0  0  0  0
0  0  0  0  0  0  0
0  0  0  0  -1  0  0
0  0  0  0  0  -2  0
0  0  0  0  0  0  -3
``````

As a result, I want a matrix of shape (4*7 x 4*7) which means (28 x 28) as follows:

``````0  3*B  0  0
0  0  4*B  0
0  0  0  3*B
0  0  0  0
``````

where B is still our matrix of shape (7x7) and the 0 represents a block of all zeroes measuring (7x7).

Maybe there is a function with numpy which can do that... but I can't find it.

(just for information, that's for Quantum mechanics)

You're looking for the Kronecker product, np.kron, which is convenient to make block matrices like this:

``````>>> A = np.array([[1, 2], [0, 1]])
>>> B = np.array([[1, 2, 3], [0, 1, 3], [0,0,0]])
>>> np.kron(A,B)
array([[1, 2, 3, 2, 4, 6],
[0, 1, 3, 0, 2, 6],
[0, 0, 0, 0, 0, 0],
[0, 0, 0, 1, 2, 3],
[0, 0, 0, 0, 1, 3],
[0, 0, 0, 0, 0, 0]])
``````
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download