本記事では、np.ravel
関数を紹介します。
np.ravel
関数は、一見マイナーであまり使用されない関数のように見えますが、知っていると便利で強力な関数です。
np.flatten
関数と同様に、配列を一次元化することができる関数ですが、np.ravel
関数の方が高速に処理することができる場合があります。np.flatten
関数については、以下の記事で解説しているので参考にしてください。
配列を1次元に変換するNumPyのflatten関数の使い方 /features/numpy-flatten.html
np.ravel
まずは、ravel
関数のAPIドキュメントについてみていきましょう。
np.ravel(a, order=’C’)
params:
パラメータ名 |
型 |
概要 |
a |
array_like 配列に相当するもの |
1次元配列に変換したい配列を指定します。 |
order |
‘C’,’F’,’A’,’K’ のいずれか |
(省略可能)初期値’C’ データの読み取り方を指定します。 |
returns:
指定されたorder
で読み取られた、1次元配列が返されます。
np.ndarray.ravel(order=’C’)
パラメータ名 |
型 |
概要 |
order |
‘C’,’F’,’A’,’K’ のいずれか |
(省略可能)初期値’C’ データの読み取り方を指定します。 |
returns:
指定されたorder
で読み取られた、1次元配列が返されます。
引数である、order
の扱いには注意が必要です。
引数 order
について
ravel
関数では引数order
を指定することで、データの読み取る順番を指定することができます。ここではメモリ上でのデータの並び方は関係ないので、他の配列生成系の関数で使われるorder
とは少し意味合いが異なることに注意してください。どちらかというとaxis
に近い役割となっています。
order
に’C’を指定すると、列方向(より厳密には最低次元の軸方向)から要素を読み取っていきます。
一方で、order
に’F’を指定すると、これが逆になり行方向(最高次元の軸方向)から要素を読み取っていきます。
order='A'
にすると、元の配列がorder='F'
、つまりFortranのスタイルでデータが格納されている場合、それと同様のスタイルでデータを読み取っていきます。
最後に、order='K'
にすると、メモリの中で出て来る値を順番に読み取っていきます。
使い方
上記をふまえて、実際のコードで使い方をみていきます。
次に、order
を変更していきます。
flattenとの違い
ravel
関数はflatten
関数とは異なり基本的にはデータのコピーを返さず、破壊的な変更になります。そのため、処理が早く終わる傾向がありますが、元の値も変更になるため、バグを生みやすくなります。
特に小さなスコープでしか使用しない場合など、破壊的な変更を気にしない場合はnp.ravel
関数を使う方が高速に処理することができるので、こちらを使用しましょう。