私は3つの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
で、関連する次元を持つゼロの行列を表します。
ブロック行列を作成する簡単な方法はnumpy.bmat
(@inquisitiveIdiot で指摘されているように) です。作成しようとしているブロック行列から判断すると、ゼロの 3x2 行列が必要です。
>>> import numpy as np
>>> z = np.zeros( (3, 2) )
次に、ブロックの 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.]])
別の (IMO より複雑な) メソッドは、numpy.hstack
andを使用することnumpy.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.]])