Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
247 views
in Technique[技术] by (71.8m points)

python - Better way to create block matrices out of individual blocks in numpy?

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.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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')

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...