np.flipとは?NumPyで配列を反転する方法|axisの使い方も解説

PythonでNumPyを使っていると、「配列の順番を逆にしたい」「行や列を反転したい」という場面があります。

このようなときに便利なのが、NumPyのnp.flip()です。

np.flip()を使うと、1次元配列だけでなく、2次元・3次元以上の配列についても、指定した軸に沿って要素の順番を反転できます。

この記事では、np.flip()の基本的な使い方から、axisの指定方法、2次元配列の反転、np.fliplr()np.flipud()との違いまで、Python初心者向けに解説します。

np.flipとは

np.flip()は、NumPy配列の要素の順番を反転するための関数です。

基本的な書き方は次のとおりです。

np.flip(配列)

例えば、次の配列を用意します。

import numpy as np

arr = np.array([1, 2, 3, 4, 5])

print(np.flip(arr))

実行結果は次のようになります。

[5 4 3 2 1]

[1, 2, 3, 4, 5]という順番が、[5, 4, 3, 2, 1]に反転しています。

NumPy公式ドキュメントでも、np.flip()は指定した軸に沿って配列の要素順を反転する関数とされています。配列の形状は維持され、要素の並びだけが変わります。(NumPy)

np.flipの基本構文

np.flip()の構文は次のとおりです。

np.flip(m, axis=None)

主な引数は2つです。

引数 内容
m 反転する配列
axis 反転する軸
axis=None すべての軸を反転

axisを指定しなかった場合は、すべての軸について反転します。(NumPy)

1次元配列をnp.flipで反転する

まずは最も簡単な1次元配列です。

import numpy as np

arr = np.array([10, 20, 30, 40, 50])

result = np.flip(arr)

print(result)

実行結果:

[50 40 30 20 10]

このように、配列の先頭と末尾が入れ替わります。

文字列の配列も反転できる

数値だけでなく、文字列を含む配列も反転できます。

import numpy as np

arr = np.array(["A", "B", "C", "D"])

print(np.flip(arr))

実行結果:

['D' 'C' 'B' 'A']

2次元配列をnp.flipで反転する

np.flip()は2次元配列にも使用できます。

例えば次の配列を考えます。

import numpy as np

arr = np.array([
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
])

print(np.flip(arr))

実行結果:

[[9 8 7]
 [6 5 4]
 [3 2 1]]

axisを指定しない場合、行方向と列方向の両方が反転します。

NumPy公式のユーザーガイドでも、2次元配列に対してnp.flip()を使うと、行と列の両方の順番を反転できる例が紹介されています。(NumPy)

axis=0でnp.flipする

axis=0を指定すると、0番目の軸を反転します。

2次元配列では、一般的に「行の順番を逆にする」と考えると分かりやすいでしょう。

import numpy as np

arr = np.array([
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
])

print(np.flip(arr, axis=0))

実行結果:

[[7 8 9]
 [4 5 6]
 [1 2 3]]

つまり、

1 2 3
4 5 6
7 8 9

が、

7 8 9
4 5 6
1 2 3

となります。

axis=1でnp.flipする

axis=1を指定すると、2次元配列では列方向を反転できます。

import numpy as np

arr = np.array([
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
])

print(np.flip(arr, axis=1))

実行結果:

[[3 2 1]
 [6 5 4]
 [9 8 7]]

各行の要素が左右反転しています。

NumPy公式ドキュメントでも、np.flip(arr, axis=1)は2次元配列の列方向を反転する方法として説明されています。(NumPy)

np.flipのaxisとは

axisは、NumPy配列の「どの方向を操作するか」を指定するための値です。

2次元配列では、基本的に次のように考えると分かりやすいでしょう。

axis=0 → 行方向
axis=1 → 列方向

例えば、

np.flip(arr, axis=0)

なら行の順番を反転します。

np.flip(arr, axis=1)

なら列の順番を反転します。

axisを指定しない場合

axisを省略すると、すべての軸を反転します。

import numpy as np

arr = np.array([
    [1, 2, 3],
    [4, 5, 6]
])

print(np.flip(arr))

結果:

[[6 5 4]
 [3 2 1]]

行の順番も、各行の要素の順番も反転しています。

複数のaxisを指定する

axisには整数だけでなく、タプルを指定することもできます。

例えば、

np.flip(arr, axis=(0, 1))

とすると、0番目と1番目の両方の軸を反転できます。

import numpy as np

arr = np.array([
    [1, 2, 3],
    [4, 5, 6]
])

print(np.flip(arr, axis=(0, 1)))

実行結果:

[[6 5 4]
 [3 2 1]]

公式ドキュメントでも、axisには整数だけでなく、複数の軸を指定するタプルを渡せるとされています。(NumPy)

負のaxisも使える

NumPyでは、axisに負の値を指定することもできます。

例えば、

np.flip(arr, axis=-1)

とすると、最後の軸を反転します。

2次元配列の場合、

axis=-1

は、

axis=1

に相当します。

例えば、

import numpy as np

arr = np.array([
    [1, 2, 3],
    [4, 5, 6]
])

print(np.flip(arr, axis=-1))

結果:

[[3 2 1]
 [6 5 4]]

負のaxisは、多次元配列を扱うときにも便利です。

3次元配列をnp.flipする

np.flip()は3次元以上の配列にも使用できます。

import numpy as np

arr = np.arange(8).reshape(2, 2, 2)

print(arr)

実行結果:

[[[0 1]
  [2 3]]

 [[4 5]
  [6 7]]]

例えば、

print(np.flip(arr, axis=0))

とすると、0番目の軸が反転します。

[[[4 5]
  [6 7]]

 [[0 1]
  [2 3]]]

このように、3次元以上の配列でもaxisを指定して反転できます。(NumPy)

np.flipとスライス[::-1]の違い

Pythonでは、次のようなスライスでも配列を逆順にできます。

arr[::-1]

例えば、

arr = np.array([1, 2, 3, 4, 5])

print(arr[::-1])

結果:

[5 4 3 2 1]

これは、

np.flip(arr)

と同じような結果になります。

NumPy公式ドキュメントでは、np.flip(m, n)は該当する軸に::-1を指定する操作に相当すると説明されています。(NumPy)

np.flipを使うメリット

多次元配列を扱う場合は、np.flip()のほうが「どの軸を反転しているのか」が明確になります。

例えば、

np.flip(arr, axis=1)

なら、「axis=1を反転している」とコードから読み取れます。

np.flipとnp.fliplrの違い

NumPyにはnp.fliplr()という関数もあります。

np.fliplr(arr)

これは2次元配列などで左右方向に反転するための関数です。

np.fliplr(arr)

は、

np.flip(arr, axis=1)

と同等です。(NumPy)

例えば、

import numpy as np

arr = np.array([
    [1, 2, 3],
    [4, 5, 6]
])

print(np.fliplr(arr))

結果:

[[3 2 1]
 [6 5 4]]

np.flipとnp.flipudの違い

np.flipud()は、配列を上下方向に反転する関数です。

np.flipud(arr)

2次元配列では、

np.flip(arr, axis=0)

と同等です。(NumPy)

まとめると、次のようになります。

関数 内容
np.flip(arr) すべての軸を反転
np.flip(arr, axis=0) 0番目の軸を反転
np.flip(arr, axis=1) 1番目の軸を反転
np.flipud(arr) 上下方向に反転
np.fliplr(arr) 左右方向に反転

np.flipの戻り値

np.flip()は、反転された配列を返します。

また、NumPy公式ドキュメントでは、np.flip()は入力配列のビューを返すと説明されています。ビューとして返されるため、反転操作そのものは一定時間で実行されます。(NumPy)

そのため、大きな配列を扱う場合には、単純な反転処理について効率面でもメリットがあります。

np.flipで元の配列は変わる?

np.flip()を使っただけでは、元の配列そのものを反転した配列に置き換えるわけではありません。

import numpy as np

arr = np.array([1, 2, 3, 4])

result = np.flip(arr)

print(arr)
print(result)

結果:

[1 2 3 4]
[4 3 2 1]

元のarrはそのままです。

ただし、np.flip()の戻り値はビューなので、戻り値側を変更すると元の配列に影響する場合があります。

元の配列とは独立した配列として扱いたい場合は、必要に応じてコピーを作ります。

result = np.flip(arr).copy()

np.flipを使う場面

np.flip()は、次のような場面で利用できます。

配列の順番を逆にしたい

arr = np.array([1, 2, 3, 4, 5])

result = np.flip(arr)

時系列データを逆順にしたい

例えば、古いデータから新しいデータの順に並んでいる配列を逆順にする場合にも利用できます。

data = np.array([100, 120, 130, 150, 180])

new_data = np.flip(data)

print(new_data)

画像データを反転したい

画像をNumPy配列として扱っている場合、axisを指定することで画像の上下・左右方向を反転できます。

例えば左右反転なら、

flipped = np.flip(image, axis=1)

のように書けます。

多次元データの特定方向を反転したい

機械学習や画像処理などで扱う多次元配列では、特定の軸だけを反転したい場合があります。

そのような場合に、

np.flip(data, axis=2)

のようにaxisを明示できます。

np.flipでよくある間違い

初心者がnp.flip()を使うときは、axisの意味を間違えやすいので注意しましょう。

例えば、

np.flip(arr, axis=0)

np.flip(arr, axis=1)

では結果が異なります。

2次元配列の場合は、

axis=0 → 行の順番を反転
axis=1 → 列の順番を反転

と覚えておくと理解しやすくなります。

np.flipのまとめ

np.flip()は、NumPy配列の要素を反転するための便利な関数です。

基本的な使い方は、

np.flip(arr)

です。

特定の軸だけを反転したい場合は、

np.flip(arr, axis=0)

や、

np.flip(arr, axis=1)

のようにaxisを指定します。

ポイントをまとめると次のとおりです。

  • np.flip()は配列の要素順を反転する

  • axisを指定して反転する方向を選べる

  • axis=Noneではすべての軸を反転する

  • 2次元配列ではaxis=0が行方向、axis=1が列方向

  • 複数の軸をタプルで指定できる

  • np.fliplr()は左右反転

  • np.flipud()は上下反転

  • スライスの[::-1]でも逆順にできる

  • 3次元以上の多次元配列にも利用できる

NumPyで配列操作を覚えるなら、np.flip()は比較的シンプルで、axisの理解にも役立つ関数です。特にデータ分析や画像処理、機械学習などでNumPyを使う場合には、ぜひ覚えておきたい操作の一つです。 (NumPy)

プログラミング学習に興味がある方は、まずは無料体験会へ

無料体験会・お申し込みはこちら