numpyview
の s とs の違い、および可変型と不変型の違いをゆっくりと理解しようとしています。copy
「高度なインデックス」を使用して配列の一部にアクセスすると、コピーが返されるはずです。これは本当のようです:
In [1]: import numpy as np
In [2]: a = np.zeros((3,3))
In [3]: b = np.array(np.identity(3), dtype=bool)
In [4]: c = a[b]
In [5]: c[:] = 9
In [6]: a
Out[6]:
array([[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.]])
は単なるコピーであるためc
、データを共有せず、変更しても変化しませんa
。しかし、これは私を混乱させるものです:
In [7]: a[b] = 1
In [8]: a
Out[8]:
array([[ 1., 0., 0.],
[ 0., 1., 0.],
[ 0., 0., 1.]])
したがって、高度なインデックス作成を使用しても、割り当ては左側のものをビューとして扱います。2 行目は6 行a
目と同じオブジェクト/データであることは明らかです。a
c
だから私の質問:a
行 8 は以前と同じオブジェクト/データですか (もちろん対角線は数えません)、それともコピーですか? つまり、a
のデータが新しい にコピーされたのa
か、それともそのデータが変更されたのか?
たとえば、次のようなものですか。
x = [1,2,3]
x += [4]
または好き:
y = (1,2,3)
y += (4,)
a.flags.owndata
どちらの場合も であるため、これを確認する方法がわかりませんTrue
。私がこれについて紛らわしい方法で考えている場合は、お気軽に詳しく説明するか、別の質問に答えてください。