NumPy のコピーとビュー

PythonPythonBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

このチュートリアルでは、NumPy ライブラリの ndarray のコピーとビューの概念について学びます。既存の配列の新しいコピーを作成するか、配列の新しいビューを作成するために copy()view() 関数をどのように使用するかを学びます。また、コピーとビューの違いと、それらがどのように異なる動作をするかも学びます。

VM のヒント

VM の起動が完了したら、左上隅をクリックして ノートブック タブに切り替えて、Jupyter Notebook を使って練習しましょう。

時々、Jupyter Notebook が読み込み終わるまで数秒待つ必要がある場合があります。Jupyter Notebook の制限により、操作の検証を自動化することはできません。

学習中に問題に遭遇した場合は、Labby にお問い合わせください。セッション後にフィードバックを提供してください。すぐに問題を解決いたします。

コピーとビューの違いを理解する

コピーとビューの主な違いは、copy() 関数が新しい配列を作成するのに対し、view() 関数が元の配列の新しいビューを作成することです。入力配列の新しいコピーを作成するとき、それはメモリの別の場所に格納されますが、ビューを作成するとき、それは元の配列と同じメモリ位置を指します。これは、入力配列のコピーに対して行われた変更が元の配列に影響を与えないこと、逆も同様であることを意味します。ただし、ビューに対して行われた変更は元の配列に影響を与え、逆も同様です。

コピーまたは配列代入なし

NumPy 配列を別の配列に代入すると、元の配列の直接的なコピーは作成されません。代わりに、同じ内容と ID を持つ別の配列が作成され、これは元の配列への参照になります。この参照配列に対して何らかの変更を加えると、それが元の配列に直接反映されます。

import numpy as np

input_arr = np.array([[5,2,7,4],[9,0,2,3],[1,2,3,19]])
print("The Original Array is :\n")
print(input_arr)
print("\nThe ID of array a:")
print(id(input_arr))

b = input_arr #input_arr を b に代入
print("\nNow we make the copy of the input_arr")
print("\nThe ID of b:")
print(id(b))
b.shape = 4, 3 #b にいくつかの変更を加える
print("\nThe Changes on b also reflect to a:")
print(input_arr)

Numpy のコピーまたはディープコピー

copy() 関数を使用してコピーを作成する場合、これはディープコピーとしても知られています。配列のコピーはデータを所有しており、これはコピーに対して行われた変更が元の配列に影響を与えないこと、逆も同様であることを意味します。

入力配列のディープコピーを作成するには、numpy.ndarray.copy() 関数を使用できます。

import numpy as np

## 配列を作成しましょう
a = np.array([5, 4, 6, 8, 9])

## 入力配列のコピーを作成しましょう
c = a.copy()

## では、a と c の id を確認しましょう
print("入力配列 a の id:")
print(id(a))
print("c の id は:")
print(id(c))

## では、元の配列を変更します
a[0] = 25

## 入力配列とコピーの両方を表示します
print("元の配列:")
print(a)
print("コピーは:")
print(c)

Numpy のビューまたはシャローコピー

配列のビューを作成するとき、これはシャローコピーとしても知られています。ビューは元の配列を指すだけで、データを所有していません。これは、ビューに対して行われた変更が元の配列に影響を与え、逆も同様であることを意味します。

入力配列のビューを作成するには、numpy.ndarray.view() 関数を使用できます。

import numpy as np

## 与えられた入力配列
ar = np.array([2, 4, 6, 8, 10, 12])

## ビューを作成する
v = ar.view()

## これで ar と v は異なる id を持つことになります
print("ar の id")
print(id(ar))
print("v の id")
print(id(v))

## 元の配列を変更するとビューにも影響があります
ar[3] = 16

## 配列とビューの両方を表示する
print("元の配列:")
print(ar)
print("ビュー:")
print(v)

まとめ

このチュートリアルでは、NumPy ライブラリの ndarray のコピーとビューの概念について学びました。既存の配列の新しいコピーを作成するか、配列の新しいビューを作成するために copy()view() 関数をどのように使用するかを学びました。また、コピーとビューの違いと、それらがどのように異なる振る舞いをするかも学びました。これらの概念を追加の例で練習することをお勧めします。