【Python】NumPyの1次元変換メソッドravelとflattenとの違い
NumPyを使った配列操作で、次元を1次元に変換する方法としてよく使われるのがravelとflattenです。一見似ているこれらのメソッドですが、実は挙動に重要な違いがあります。本記事では、ravelとflattenの違いについて、参照やコピーの観点から分かりやすく解説します。使いどころを間違えると意図しないバグにつながる可能性もあるため違いをしっかり理解しましょう。
NumPyのravelとflattenの違い
ravelメソッド:
- 参照を返す可能性があります(元の配列を参照しているビューを返します)。
- ただし、元の配列がメモリ上で連続していない場合や変更を加える場合は、新しいコピーを返します。
- よりメモリ効率的な操作が可能です。
flattenメソッド:
- コピーを常に返します。
- 元の配列とは独立した新しい配列を生成します。
例で確認
import numpy as np # 元の配列 a = np.array([[1, 2], [3, 4]]) # flatten # コピー b = a.flatten() b[0] = 0 # cを変更 print(a) # aには変更が反映されない(コピーの場合) # ravel # 参照 c = a.ravel() c[0] = 99 # bを変更 print(a) # aにも変更が反映される(参照の場合) # 出力結果 # [[1 2] # [3 4]] # [[99 2] # [ 3 4]]
スポンサーリンク