5

私は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で、関連する次元を持つゼロの行列を表します。

4

2 に答える 2

8

ブロック行列を作成する簡単な方法は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.hstackandを使用すること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.]])
于 2013-10-31T17:43:59.627 に答える