HOWTO · NumPy
PythonでNumPy配列を反転する方法
Python で NumPy 配列を逆にするために使用できる主なメソッドは、Basic Slicing メソッド、numpy.flipud()関数、および numpy.flip()関数の 3つです。
このページの内容
PythonでNumPy配列を反転するには、[::-1] による基本スライス、numpy.flipud()、numpy.flip() を使います。スライスは1次元配列を簡潔に反転でき、ビューを返します。numpy.flipud() は軸0に沿って行を反転し、numpy.flip() は指定した軸、またはすべての軸を反転できます。以下の例で、それぞれの結果の違いを確認できます。
PythonでNumPy配列を基本スライスで反転する
1次元配列では、array[::-1] を使うと、ステップ幅を -1 として末尾から先頭へ要素を選択できます。次の例を実行します。
このセクションのコードと表示されるラベルや出力は英語のままです。
import numpy as np
array = np.array([1, 2, 3, 4, 5])
reverse = array[::-1]
print(reverse)
[5 4 3 2 1]
このスライスは array と同じデータを参照するビューであり、独立したコピーは作りません。そのため、reverse を通じて値を代入すると、array の対応する要素も変わります。元の値を独立したままにするには、array[::-1].copy() でコピーを作成してください。この方法は、ビューとして扱って問題がない場合に、1次元配列を簡潔に反転するのに便利です。多次元配列では、同じ式で反転されるのは最初の軸だけです。変更する次元を指定したい場合は、軸を指定できる関数を使います。
Pythonでnumpy.flipud()関数を使ってNumPy配列を反転する
numpy.flipud() は軸0に沿って配列を反転します。1次元配列では軸0が唯一の軸なので、値が逆順になります。2次元配列では軸0は行方向を表します。行の順序は変わりますが、各行内の値の順序は変わりません。この関数については、NumPyのnumpy.flipud()ドキュメントを参照してください。
このセクションのコードと表示されるラベルや出力は英語のままです。
import numpy as np
array = np.array([[1, 2], [3, 4]])
print(np.flipud(array))
[[3 4]
[1 2]]
軸0の反転が目的であれば、特に行列の行順を逆にしたい場合に numpy.flipud() を選びます。1次元配列ではスライスに代わる読みやすい方法です。別の軸を反転する場合は、軸を明示して numpy.flip() を使います。
Pythonでnumpy.flip()関数を使ってNumPy配列を反転する
numpy.flip() は、指定した軸に沿って要素の順序を反転します。2次元配列で axis=1 を指定すると、各行内の列の順序が逆になります。axis を省略すると、既定値の None が使われ、すべての軸が反転されます。つまり、行の順序と各行内の順序の両方が変わりますが、配列が1つの列に平坦化されるわけではありません。詳しくはNumPyのnumpy.flip()ドキュメントを参照してください。
このセクションのコードと表示されるラベルや出力は英語のままです。
import numpy as np
array = np.array([[1, 2], [3, 4]])
print(np.flip(array, axis=1))
print(np.flip(array))
[[2 1]
[4 3]]
[[4 3]
[2 1]]
行を反転するには numpy.flip(array, axis=0)、2次元配列で列を反転するには axis=1 を指定し、すべての次元を反転するには axis を省略します。1次元配列で axis を省略すると、唯一の軸が反転されます。使い分けの目安として、短い1次元の式にはスライス、軸0を明確に反転するには numpy.flipud()、軸を指定したりすべての軸を反転したりするには numpy.flip() を選びます。これらの操作は各次元に沿って要素の順序を変えるもので、値の並べ替えや配列の形状変更は行いません。