numpy.copyで配列をコピーする(ndarray.copy)

配列をコピーする 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.copyndarray.copy では order のデフォルト値が異なる。

参考URL