Numpy-copies-and-views
NumPy-コピーとビュー
関数の実行中に、入力配列のコピーを返す関数と、ビューを返す関数があります。 コンテンツが物理的に別の場所に保存されている場合、それは*コピー*と呼ばれます。 一方、同じメモリコンテンツの別のビューが提供される場合、 View と呼びます。
コピーなし
単純な割り当てでは、配列オブジェクトのコピーは作成されません。 代わりに、元の配列と同じid()を使用してアクセスします。 * id()*は、Cのポインターに似たPythonオブジェクトのユニバーサル識別子を返します。
さらに、いずれかの変更が他方に反映されます。 たとえば、一方の形状が変化すると、他方の形状も変化します。
例
それは次の出力を生成します-
import numpy as np#そもそも、aは3X2配列a = np.arange(6).reshape(3,2)
print 'Array a:' print a
print 'a:のビューを作成' b = a.view()print b
両方の配列のprint 'id()は異なります:' print 'id()of a:' print id(a)print 'id()of b:' print id(b)
#bの形状を変更します。 b.shape = 2,3の形状は変更しません
'bの形状:'印刷b
'Shape of a:'を印刷します
配列a:[[aのビューを作成:[[id()両方の配列は異なります:id()of a:140424307227264 id()of b:140424151696288
bの形状:[[aの形状:[[配列のスライスはビューを作成します。
例
それは次の出力を生成します-
numpy as np a = np.array([[print 'Array a is:' print a
print 'aのディープコピーを作成:' b = a.copy()print 'Array b is:' print b
- bは印刷のメモリを共有しません 'b is a can' write a b 'print b is a
print 'b:の内容を変更します' b [0,0] = 100
print 'Modified array b:' print b
印刷 'aは変わりません:'印刷
配列aは次のとおりです。[[aのディープコピーを作成:配列bは次のとおりです。
bの内容を変更します:変更された配列b:[[aは変更されないままです:[[