
配列をコピーする numpy.copy
ある配列(ndarrayやリスト)をコピーして別のndarrayとして扱うには、numpy.copy
を使用します。同様の関数は、ndarrayに対しても定義されており、ndarray.copy
を使用しても実現可能です。
Pythonの代入は参照そのものがコピーされるため、同じオブジェクトに別名をつけただけになってしまいます。NumPyも同様で、ndarrayを代入してコピーしようとしても同じ参照の為、別のndarrayとはなりません。
import numpy as np
# 配列aとそのコピーb(代入)
a = np.arange(5)
b = a
# aだけ値を一部更新
a[0] = 100
# aの更新がbにも反映されている
print(a) # [100 1 2 3 4]
print(b) # [100 1 2 3 4]
上記例ではaをコピーしようとbに代入していますが、同じ参照の為、aの更新がbに反映されてしまっています。numpy.copy
関数の使い方を以下にまとめます。
numpy.copyto関数の使い方
numpy.copy
関数は、ある配列を別のndarrayにコピーするための関数です。引数でコピー元となる配列(array_like)を引数で指定すると、そのデータをコピーした配列(ndarray)を返します。
コピー元の配列がndarrayであれば、ndarray.copy
が使えます。こちらのほうが見やすいかもしれません。動作としては同じです。
import numpy as np
a = np.arange(5)
b = np.copy(a) # numpy.copyでコピー
c = a.copy() # ndarray.copyでコピー
a[0] = 100
print(a) # [100 1 2 3 4]
print(b) # [0 1 2 3 4]
print(c) # [0 1 2 3 4]
numpy.copy関数のパラメータ
numpy.copy(a, order='K')
パラメータ | 型 | 説明 |
---|---|---|
a | array_like | コピー元となる配列(ndarrayやPythonのシーケンス)を指定します。 |
order | string | 省略可能。データをメモリ上にどのような順序で保持するかを、'C','F','A','K' で指定します。デフォルトは 'K' で元の配列と同じ順序を継承します。※ndarray.copyとデフォルト値が異なります。 |
return値として配列のコピーを返します。
ndarray.copy関数のパラメータ
ndarray.copy(order='C')
パラメータ | 型 | 説明 |
---|---|---|
order | string | 省略可能。データをメモリ上にどのように保持するかを、'C','F','A','K' で指定します。デフォルトは 'C' で元の配列と同じメモリレイアウトを継承します。※numpy.copyとデフォルト値が異なります。 |
まとめ
- 代入だと配列はできない。
- 配列のコピーには、
numpy.copy
を使用する。 - ndarrayをコピー元とする場合、
ndarray.copy
も使用できる。 numpy.copy
とndarray.copy
では order のデフォルト値が異なる。