Python 用numpy中的单个块创建块矩阵的更好方法?

Python 用numpy中的单个块创建块矩阵的更好方法?,python,numpy,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.concatena

以代码为例

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]]
我知道这只是为阵列保留的

从NumPy 1.13开始,有:

对于以前的版本,有:

numpy.bmat
创建矩阵,而不是数组。这通常是件坏事。如果需要数组,可以对结果调用
asarray
,或者使用:

bmat
还对堆栈帧进行了一些处理,以实现这一点:

Block = numpy.bmat('A11,A12; A21,A22')

如果你想使用稀疏矩阵,例如,
A11
,…,
A22
scipy.sparse.csr_矩阵
类型,那么你可以使用
scipy.sparse.bmat([[A11,A12],[A21,A22]])
,或者如果你希望该部分为零,可以选择将
Aii
替换为
None
Block = numpy.bmat([[A11, A12], [A21, A22]])
Block = numpy.bmat([[A11, A12], [A21, A22]]).A
Block = numpy.bmat('A11,A12; A21,A22')