在numpy中用单个块创建块矩阵的更好方法是什么?

时间:2015-07-17 06:34:39

标签: python numpy

考虑代码

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]]

将完成它。我知道这只是为数组保留。

1 个答案:

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