2016-06-17 8 views
0

私はスライスを使って配列の割り当てを使用していたときに、奇妙なことが起こったことがあります。ソースコードは以下である:、が配列割り当て後の異なるID B および、結果からスライスを使った配列の割り当て

enter image description here

import numpy as np 
a = np.array([1,2,3,4]).reshape(2,2) 
b = np.array([5,6,7,8]).reshape(2,2) 
print(id(a)) 
print(id(b)) 
b = a[:] 
b[1,1] = 10 
print(b is a) 
print(id(a)) 
print(id(b)) 
print(a) 
print(b) 

結果は以下のように与えられます。しかし、の値をに変更すると、の値がに変更されました。どうしてこれなの?

崇高なテキストを使用すると、Python 3.4.3。

+0

このリンクは一覧です。この質問は 'numpy'配列に関するものです。 – hpaulj

+2

'a [:]'は 'view'をコピーにしません。 – hpaulj

+0

@hpauljありがとう。あなたが正しいです。ナンシー配列はリストとは異なります。 –

答えて

0

b=a[:]aのコピーを作成します:ここに役立つかもしれない前の回答です。 bの変更はaまたはその値に影響しません。

しかし、numpy配列の場合、このアクションはviewとなります。 bは新しいオブジェクトですが、基になるデータバッファを共有します。 bの値の変更はaに影響します。

b=b.copy()を使用すると、真のコピーが必要ですか?

https://docs.scipy.org/doc/numpy-dev/user/quickstart.html#copies-and-views

+0

これは私が見つけたファイルです。あなたが言ったとおりです。[docs.scipy.org/doc/numpy-dev/user/quickstart](https://docs.scipy.org/doc/numpy-dev/user/quickstart) .html) –