Python で 2D 配列をコピーする

Isaac Tony 2023年1月30日
  1. NumPy copy() 関数を使用して 2D 配列のコピーを作成する
  2. copy.deepcopy() 関数を使用して 2D 配列のコピーを作成する
  3. Python で 2D 配列の浅いコピーを作成する
Python で 2D 配列をコピーする

2 次元配列は、行と列のデータを表す配列の配列です。

2 次元配列の要素には、2つのインデックスを使用してアクセスできます。最初のインデックスは配列内のサブ配列を参照し、2 番目のインデックスは個々の要素を参照します。

2 次元配列は、次の構文に従います。

array_name = [[d1, d2, d3, d4, ..., dn], [c1, c2, c3, c4, ...., cn]]

最初のサブ配列は行を表し、2 番目のサブ配列はテーブルの列を表します。

オブジェクトのコピーを作成することは、配列の操作と変更の重要な側面です。

これにより、エラーが発生することなく、配列などのオブジェクトを自由に反復および変更できます。コピーを作成すると、元のオブジェクトを保持し、代わりにコピーに対して操作を実行することもできます。

Python は、Python で配列またはその他の可変オブジェクトのコピーを作成するために使用できるさまざまなファクトリ関数を提供します。これらの可変オブジェクトには、辞書、セット、およびリストが含まれます。

NumPy copy() 関数を使用して 2D 配列のコピーを作成する

NumPy は copy() 関数を提供します。copy() 関数は、次のように実装できます。

import numpy as np

x = np.array([[23, 34, 45], [24, 45, 78]])

y = x.copy()
print(y)

# making changes to the copy of array
y[0][2] = 65
print(y)

# printing original 2d array
print(x)

出力:

[[23 34 45]
 [24 45 78]]
[[23 34 65]
 [24 45 78]]
[[23 34 45]
 [24 45 78]]

サンプルコードでは、元の配列のコピーを作成し、そのコピーを変更しました。ただし、最後の行に出力された配列の元のコピーを保持しています。

copy.deepcopy() 関数を使用して 2D 配列のコピーを作成する

ディープコピー機能を使用すると、元のオブジェクトから新しいオブジェクトにオブジェクトを再帰的に追加することで、新しい複合オブジェクトを作成できます。

これは、配列である新しいオブジェクトに加えられた変更が元の配列に影響を与えないことを意味します。このメソッドを実装するには、コピーモジュールで使用可能な deepcopy() 関数を使用します。

コピーモジュールは、リストや配列などの Python オブジェクトから要素をコピーするための関数を提供します。次の例に示すように、deepcopy() 関数を使用して 2D 配列のコピーを作成できます。

import copy

x = [[24, 23, 25], [32, 43, 54]]
y = copy.deepcopy(x)
# a copy of the original array
print(y)
# making changes to the copy of the array
y[0][2] = 100
print(y)

# original array
print(x)

出力:

[[24, 23, 25], [32, 43, 54]]
[[24, 23, 100], [32, 43, 54]]
[[24, 23, 25], [32, 43, 54]]

Python で 2D 配列の浅いコピーを作成する

同様に、シャローコピーメソッドも、元のオブジェクトを表す複合オブジェクトを作成します。元のオブジェクトのコピーを挿入するディープコピーとは異なり、シャローコピーは元のオブジェクトのオブジェクトのみを参照します。

したがって、浅いコピーは繰り返されませんが、あるオブジェクトの参照を別のオブジェクトにコピーすることしかできません。これは、一方のオブジェクトの変更がもう一方のオブジェクトに影響を与えないことを意味します。

以下に示すように、浅いコピーは view() 関数を使用して実装できます。

import numpy as np

x = np.array([[24, 23, 25], [32, 43, 54]])

y = x.view()

# a copy of the original array

# making changes to the copy of the array
y[0][2] = 100
print(y)

# original array
print(x)

出力:

[[ 24  23 100]
 [ 32  43  54]]
[[ 24  23 100]
[ 32  43  54]]

この場合、1つの配列の値を変更すると、元の配列の値が変更されます。ただし、2つの配列は依然として異なるオブジェクトを参照します。

id() 関数を使用して、2つの配列が異なるオブジェクトを参照していることを確認できます。これは、オブジェクトの ID を返す組み込み関数であり、以下に示すように実装できます。

import numpy as np

x = np.array([[24, 23, 25], [32, 43, 54]])
print(id(x))

y = x.view()

print(id(y))
# a copy of the original array

# making changes to the copy of the array
y[0][2] = 100
print(y)

# original array
print(x)

出力:

139636169252912
139636169253008
[[ 24  23 100]
 [ 32  43  54]]
[[ 24  23 100]
 [ 32  43  54]]

または、copy() 関数を使用して 2D 配列の浅いコピーを作成することもできます。

コピーモジュールは、リスト、配列、およびその他のオブジェクト内の要素をコピーするためのさまざまな関数を提供する copy() 関数を提供します。以下に示すように、コピー関数を実装して浅いコピーを作成できます。

import numpy as np
import copy

x = np.array([[24, 23, 25], [32, 43, 54]])

y = copy.copy(x)

# a copy of the original array

# making changes to the copy of the array
y[0][2] = 100
print(y)

# original array
print(x)

出力:

[[ 24  23 100]
 [ 32  43  54]]
[[24 23 25]
 [32 43 54]]
著者: Isaac Tony
Isaac Tony avatar Isaac Tony avatar

Isaac Tony is a professional software developer and technical writer fascinated by Tech and productivity. He helps large technical organizations communicate their message clearly through writing.

LinkedIn

関連記事 - Python Array