NumPyのflatten
関数は、多次元配列を1次元に変換する関数です。関数型プログラミングに慣れている方は、flatten
という名前の関数でネストされたリストが1次元になるので、どのような動作をするのか想像しやすいかもしれません。
本記事では、NumPyのflatten
関数についての使い方を確かめながら、パフォーマンスについても言及します。実装のパフォーマンスが段違いに上がることを紹介するので、知っておくと役に立つので抑えておくとよいでしょう。
ndarray.flatten
まずは、flatten
関数についてのAPIドキュメントについて見ましょう。
np.ndarray.flatten(order = ‘C’)
params:
パラメータ名 |
型 |
概要 |
order |
{‘C’,’F’,’A’,’K’}のいずれか |
(省略可能)初期値’C’ 配列のデータの並べ方を指定します。 |
returns:
元の配列を1次元配列に直した配列のコピーを返します。
この関数は基本的には引数を指定しないで使う場合が多いでしょう。order
はFortranのような順序の方法を指定する場合に使われるものであまり使用されません。
reshape
より汎用性に欠けますが、引数を特に指定する必要がなく、flatten
を使用することでどのような変換をしたかが一目でわかるので、1次元配列に変換するときはnp.ndarray.flatten
関数を使うことをおすすめします。
2次元配列を1次元配列に変換
コードの使用例を見てみます。
3次元配列を1次元配列に変換
元の多次元配列が3次元配列の場合も確認してみます。
パフォーマンス
同様の動作をする関数にnp.ravel
関数があります。この関数は、flatten
関数とは違い、コピーを作成しません。大きなデータで破壊的な変更をしても問題ない場合は、こちらの関数を使用することでパフォーマンスの向上が見込めます。
多次元配列を作って、パフォーマンスを確認してみます。
np.ravel
の方が、flatten
関数よりも高速に動作していることが確認できました。NumPyでは、使用方法を考えることでパフォーマンスを向上することが出来ます。
np.ravel
関数については、以下の記事で詳細に解説しています。
flattenよりも高速に配列を一次元化するnumpy.ravel関数の使い方 /features/numpy-ravel.html