考虑代码
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);
我是numpy并且学习它的新手。我想以下列方式创建一个块矩阵
RowBlock1=np.concatenate((A11,A12),axis=1)
RowBlock2=np.concatenate((A21,A22),axis=1)
Block=np.concatenate((RowBlock1,RowBlock2),axis=0)
有更简单的方法吗?例如:,在matlab中我会做
Block=[[A11,A12];[A21,A22]]
将完成它。我知道这只是为数组保留。
答案 0 :(得分:9)
从NumPy 1.13开始,有numpy.block
:
Block = numpy.block([[A11, A12], [A21, A22]])
对于以前的版本,有bmat
:
Block = numpy.bmat([[A11, A12], [A21, A22]])
numpy.bmat
创建一个矩阵,而不是数组。这通常是件坏事。如果您需要数组,可以在结果上调用asarray
,或使用A
attribute:
Block = numpy.bmat([[A11, A12], [A21, A22]]).A
bmat
也会对堆栈帧进行一些处理,让你这样做:
Block = numpy.bmat('A11,A12; A21,A22')