非IT企業に勤める中年サラリーマンのIT日記

非IT企業でしかもITとは全く関係ない部署にいる中年エンジニア。唯一の趣味がプログラミングという”自称”プログラマー。

【Python】NumPyの1次元変換メソッドravelとflattenとの違い

   

NumPyを使った配列操作で、次元を1次元に変換する方法としてよく使われるのがravelflattenです。一見似ているこれらのメソッドですが、実は挙動に重要な違いがあります。本記事では、ravelflattenの違いについて、参照やコピーの観点から分かりやすく解説します。使いどころを間違えると意図しないバグにつながる可能性もあるため違いをしっかり理解しましょう。

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]]
 

 

 

スポンサーリンク

 - Python