2

python 2.7.1 と numpy 1.5.1 の場合:

import numpy as np

B = np.matrix([[-float('inf'), 0], [0., 1]])
print B
Bm = B[1:, :]
Bm[:, 1] = float('inf')
print B

戻り値

[[-inf   0.]
 [  0.   1.]]
[[-inf   0.]
 [  0.  inf]]

Bm はコピーだと思っていたので、これはかなり予想外です (この質問のように)。

これを理解するための助けをいただければ幸いです。

4

3 に答える 3

5

numpyでの基本的なスライスは、Pythonリストをコピーしてコピーするのとは対照的に、ビューを返します。

ただし、numpy配列を連結または追加するのと同じように、高度なスライスを使用する場合、スライスは常にデータをコピーします。

比較

a = np.arange(16).reshape((4,4))
a_view = a[::2, ::3]  # basic slicing
a_copy = a[[0, 2], :]  # advanced
于 2012-05-20T10:06:04.630 に答える
2

私の質問では、それはnp.appendコピーを作成していたということでした。スライスしても、配列/マトリックスはコピーされません。

あなたはBmでコピーを作ることができます

Bm = B[1:, :].copy()
于 2012-05-20T09:48:26.457 に答える