はじめに
NumPyでは、多次元配列(行列)を1次元配列に変換する操作が必要になることがあります。この変換は「フラット化」と呼ばれ、NumPyには主にflatten()メソッドとravel()関数の2つの方法が用意されています。この記事では、これらの方法の使い方と違いについて説明します。
解説
行列の生成
flatten()による1次元化
元の行列を1次元に変換した行列が得られます。
ravel()による1次元化
flatten()と同様に、元の行列を1次元に変換した行列が得られます。
reshape(1,-1)による1次元化
(1,-1)で1次元の行列となります。
flatten()とravel()の違い
flatten()とravel()の主な違いは、元の配列に変更を加えた際の動作にあります。ravel()は変更が元の配列に反映されるため、意図せず値が変わってしまうことがあります。こうした予期せぬエラーを防ぐためには、flatten()を利用するほうが安全でしょう。
まとめ
NumPyで行列を1次元配列に変換する方法として、flatten()
メソッドとravel()
関数があります。flatten()
はコピーを作成するため元の配列に影響を与えませんが、ravel()
はビューを返すため変更が元の配列に反映されることがあります。メモリ効率を重視する場合はravel()
が、データの独立性を確保したい場合はflatten()
が適しています。用途に応じて適切な方法を選択しましょう。
参考

flattenよりも高速に配列を一次元化するnumpy.ravel関数の使い方
NumPyには配列を1次元ベクトル(配列)に変換する関数がravelとflattenの主に2つ存在します。本記事では、そのうちの1つであるravel関数について解説しました。
コメント