numpyのarrayとasarrayの違いと使いどころ[自分用メモ]
前置き
題名の通り、自分用メモ。 他のブログ記事などは、reference等を適当にまとめてるだけな印象。 結局何なのか曖昧だったので現状の理解をざっくりまとめる。
arrayとasarrayの共通点
引数にndarray以外の配列が来たら、ndarrayを返す。引数と戻り値は別物。
つまり
import numpy as np a = [0,1,2] b = np.array(a) c = np.asarray(a) a[0] = 100 print(a) print(b) print(c)
出力結果
[100, 1, 2] [0 1 2] [0 1 2]
arrayとasarrayの相違点
引数がndarrayの時、arrayなら新しいndarrayを返し、asarrayなら参照オブジェクトを返す。
つまり
import numpy as np a = np.array([0,1,2]) b = np.array(a) c = np.asarray(a) a[0] = 100 print(a) print(b) print(c)
出力結果
[100 1 2] [0 1 2] [100 1 2]
cはaの参照なので、aの中身が変わればcも同様に変わる。
使いどころ
個人的に思いついたのは、例えば任意の関数で中身の処理自体はndarrayで行うが、引数自体はlistでもtupleでもndarraryでもOKにしたい場合。 asarrayを使えば、arrayに比べて新しいndarray分のメモリを増やす必要がなく、少しメモリを節約できる?
例えば、こんな感じですかね。
import numpy as np a = np.array([0,1,2]) # listでもtupleでもOK def mean(x): x = np.asarray(x) # aがlist等ならndarrayになおす。arrayの場合、新しいadrrayを生成するが、 # asarrayの場合、参照を返すのでndaray余分に生成しない分メモリ節約 return x.mean()
他にも使い所あったり、誤りがあればコメント等で共有してください。