NumPy 配列のコピーとビュー
- 前のページ NumPy データ型
- 次のページ NumPy 配列の形状
コピーとビューの違い
コピーと配列ビューの主な違いは、コピーが新しい配列であること、ビューが元の配列のビューに過ぎないことです。
コピーがデータを持っているため、コピーに対して行われるいかなる変更も元の配列に影響を与えず、元の配列に対して行われるいかなる変更もコピーに影響を与えません。
ビューはデータを持っていません。ビューに対して行われる変更は元の配列に影響を与えますが、元の配列に対して行われる変更はビューに影響を与えます。
コピー:
インスタンス
コピーを行い、元の配列を変更し、2つの配列を表示します:
import numpy as np arr = np.array([1, 2, 3, 4, 5]) x = arr.copy() arr[0] = 61 print(arr) print(x)
このコピーは元の配列に対して行われる変更に影響されません。
ビュー:
インスタンス
ビューを作成し、元の配列を変更し、2つの配列を表示します:
import numpy as np arr = np.array([1, 2, 3, 4, 5]) x = arr.view() arr[0] = 61 print(arr) print(x)
ビューは元の配列に対して行われる変更に影響されます。
ビューで変更します:
インスタンス
ビューを作成し、ビューを変更し、2つの配列を表示します:
import numpy as np arr = np.array([1, 2, 3, 4, 5]) x = arr.view() x[0] = 31 print(arr) print(x)
元の配列はビューに対して行われる変更に影響されます。
配列がデータを持っているか確認します
上記のように、コピーはデータを持っていますが、ビューはデータを持っていません。では、どうやって確認しますか?
NumPy 配列には属性があります base
、配列がデータを持っている場合、この base 属性は以下を返します None
。
そうでない場合、base
属性は元のオブジェクトを参照します。
インスタンス
配列が独自のデータを持っているか確認するために base 属性の値を印刷します:
import numpy as np arr = np.array([1, 2, 3, 4, 5]) x = arr.copy() y = arr.view() print(x.base) print(y.base)
コピーを返します None
。
ビューを元の配列に戻します。
- 前のページ NumPy データ型
- 次のページ NumPy 配列の形状