I have three same-size square matrices in NumPy. I would like to combine these to a block-diagonal matrix.
Example:
a1 = np.array([[1,1,1],[1,1,1],[1
If you want this particular array r, perhaps the easiest way would be:
r=np.kron(np.diag([1,2,3]),np.ones((3,3),dtype='int'))
If a1, a2, a3 can be arbitrary 2-dimensional arrays, then perhaps the easiest way is:
a1=np.asmatrix(a1)
a2=np.asmatrix(a2)
a3=np.asmatrix(a3)
z=np.asmatrix(np.zeros((3,3)))
r=np.asarray(np.bmat('a1, z, z; z, a2, z; z, z, a3'))
An alternative slower method is:
r=(np.kron([[1,0,0],[0,0,0],[0,0,0]],a1)
+np.kron([[0,0,0],[0,1,0],[0,0,0]],a2)
+np.kron([[0,0,0],[0,0,0],[0,0,1]],a3))