2

たとえば、行列オブジェクトのコピーを作成せずに行列転置を作成するにはどうすればよいですか? 同様に、他の行列演算 (行列から行列を減算するなど) も同様です。それをすることは有益ですか?

4

2 に答える 2

10

配列を転置してもコピーは作成されません。

>>> a = np.arange(9).reshape(3,3)
>>> b = np.transpose(a)
>>> a
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])
>>> b
array([[0, 3, 6],
       [1, 4, 7],
       [2, 5, 8]])
>>> b[0,1] = 100
>>> b
array([[  0, 100,   6],
       [  1,   4,   7],
       [  2,   5,   8]])
>>> a
array([[  0,   1,   2],
       [100,   4,   5],
       [  6,   7,   8]])

同じことが numpy.matrix オブジェクトにも当てはまります。

これ、非常に大きな配列をコピーして大量のメモリを不必要に消費することを避けたい場合に役立ちます。ただし、転置を変更するときに元の配列を意図せずに変更しないように注意する必要があります (まだ必要な場合)。

多くの numpy 関数は、オプションの「out」キーワード (numpy.dot など) を受け入れて、出力を既存の配列に書き込みます。たとえば、aとそれ自体の行列積を取り、出力を既存の array に書き込むには、次のようにしますc

numpy.dot(a, a, out=c)
于 2013-05-06T20:43:52.940 に答える