Consider the code
M=5;N=3;
A11=np.random.rand(M,M);
A12=np.random.rand(M,N);
A21=np.random.rand(N,M);
A22=np.random.rand(N,N);
I am new to numpy and learning it. I want to create a block matrix in the following manner
RowBlock1=np.concatenate((A11,A12),axis=1)
RowBlock2=np.concatenate((A21,A22),axis=1)
Block=np.concatenate((RowBlock1,RowBlock2),axis=0)
Is there a more easy way to do it? For eg:, in matlab I would do
Block=[[A11,A12];[A21,A22]]
and will be done with it.I understand that this is reserved only for arrays.
As of NumPy 1.13, there's numpy.block
:
Block = numpy.block([[A11, A12], [A21, A22]])
For previous versions, there's bmat
:
Block = numpy.bmat([[A11, A12], [A21, A22]])
numpy.bmat
creates a matrix, rather than an array. This is usually a bad thing. You can call asarray
on the result if you want an array, or use the A
attribute:
Block = numpy.bmat([[A11, A12], [A21, A22]]).A
bmat
also does some messing around with stack frames to let you do this:
Block = numpy.bmat('A11,A12; A21,A22')
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With