以块状形式组合Numpy阵列

Uni*_*ron 5 python numpy matrix

我有三个Numpy矩阵

a = np.matrix('1 2; 3 4')

b = np.matrix('5 6 7; 8 9 10')

c = np.matrix('1 2 3; 4 5 6; 7 8 9')

我想制作以下块矩阵:

M = [a b ; 0 c],

其中0代表具有相关尺寸的零矩阵.

mdm*_*dml 8

创建块矩阵的简单方法是numpy.bmat(正如@inquisitiveIdiot所指出的).根据您要创建的块矩阵判断,您需要一个3x2的零矩阵:

>>> import numpy as np
>>> z = np.zeros( (3, 2) )
Run Code Online (Sandbox Code Playgroud)

然后,您可以通过将块的2x2数组传递到numpy.bmat以下内容来创建块矩阵:

>>> M = np.bmat( [[a, b], [z, c]] )
>>> M
matrix([[  1.,   2.,   5.,   6.,   7.],
        [  3.,   4.,   8.,   9.,  10.],
        [  0.,   0.,   1.,   2.,   3.],
        [  0.,   0.,   4.,   5.,   6.],
        [  0.,   0.,   7.,   8.,   9.]])
Run Code Online (Sandbox Code Playgroud)

另一种(IMO更复杂)的方法是使用numpy.hstacknumpy.vstack.

>>> M = np.vstack( (np.hstack((a, b)), np.hstack((z, c))) )
>>> M
matrix([[  1.,   2.,   5.,   6.,   7.],
        [  3.,   4.,   8.,   9.,  10.],
        [  0.,   0.,   1.,   2.,   3.],
        [  0.,   0.,   4.,   5.,   6.],
        [  0.,   0.,   7.,   8.,   9.]])
Run Code Online (Sandbox Code Playgroud)

  • 注意这会返回一个`np.matrix`而不是`np.array`这一事实 (4认同)