NumPy配列を自由自在に反転!np.flip, np.flipud, np.fliplrを徹底解説


 

データ分析、画像処理、機械学習など、様々な場面でNumPy配列の要素の並び順を反転させたいことがあります。例えば、画像を上下逆さまにしたり、左右を反転させたり、特定の軸に沿ってデータの順序をひっくり返したりするケースです。このようなニーズに応えるのが、NumPyの**np.flip()**, np.flipud(), **np.fliplr()**関数です。この記事では、これらの関数を使ってNumPy配列を効率的に反転させる方法について、具体的なサンプルコードを交えながら詳しく解説します。


 

NumPy配列の反転とは?

 

NumPy配列の反転とは、指定した軸(または配列全体)に沿って要素の順序を逆転させる操作です。例えば、[1, 2, 3]を反転させると[3, 2, 1]になります。

これらの関数は、既存のデータを変更するのではなく、反転した新しい配列を返す点に注意してください。


 

1. 汎用的な反転:np.flip()

 

np.flip()は、指定した軸(または複数の軸)に沿って配列を反転させる、最も汎用的な関数です。

 

書式

 

Python
 
numpy.flip(m, axis=None)
  • m: 反転させたい入力配列(ndarray)。

  • axis (オプション): 反転を行う軸を指定します。

    • None (デフォルト): 配列全体をフラットにした状態で反転します。

    • 整数または整数のタプル: 指定された軸(複数可)に沿って反転します。

 

1-1. 1次元配列の反転

 

 

サンプルコード

 

Python
 
import numpy as np

arr_1d = np.array([10, 20, 30, 40, 50])
print("元の1D配列:", arr_1d)

# 配列全体を反転 (axis=None の場合と同じ)
flipped_1d = np.flip(arr_1d)
print("反転後の1D配列:", flipped_1d)

# 特定の軸(1次元なのでaxis=0)を指定して反転
flipped_1d_axis0 = np.flip(arr_1d, axis=0)
print("axis=0 で反転:", flipped_1d_axis0)

 

出力例

 

元の1D配列: [10 20 30 40 50]
反転後の1D配列: [50 40 30 20 10]
axis=0 で反転: [50 40 30 20 10]

 

1-2. 多次元配列の反転(axisの指定)

 

axis引数を使うことで、特定の軸(行方向または列方向)に沿って反転できます。

 

サンプルコード

 

Python
 
import numpy as np

arr_2d = np.array([[1, 2, 3],
                   [4, 5, 6],
                   [7, 8, 9]])
print("元の2D配列:\n", arr_2d)

# axis=0: 行方向(縦方向)に反転(上下反転)
flipped_axis0 = np.flip(arr_2d, axis=0)
print("\naxis=0 で反転 (上下反転):\n", flipped_axis0)

# axis=1: 列方向(横方向)に反転(左右反転)
flipped_axis1 = np.flip(arr_2d, axis=1)
print("\naxis=1 で反転 (左右反転):\n", flipped_axis1)

# 複数の軸を同時に反転
flipped_both_axes = np.flip(arr_2d, axis=(0, 1))
print("\naxis=(0, 1) で両方向反転:\n", flipped_both_axes)

 

出力例

 

元の2D配列:
 [[1 2 3]
 [4 5 6]
 [7 8 9]]

axis=0 で反転 (上下反転):
 [[7 8 9]
 [4 5 6]
 [1 2 3]]

axis=1 で反転 (左右反転):
 [[3 2 1]
 [6 5 4]
 [9 8 7]]

axis=(0, 1) で両方向反転:
 [[9 8 7]
 [6 5 4]
 [3 2 1]]

 

2. 上下反転に特化:np.flipud()

 

np.flipud()は、配列の上下を反転させる(行の順序を逆転させる)ための関数です。これはnp.flip(m, axis=0)と全く同じ結果を返します。主に2次元以上の配列(画像など)で使われます。

 

書式

 

Python
 
numpy.flipud(m)
  • m: 上下反転させたい入力配列。

 

サンプルコード

 

Python
 
import numpy as np

arr_2d = np.array([[1, 2, 3],
                   [4, 5, 6],
                   [7, 8, 9]])
print("元の2D配列:\n", arr_2d)

# 上下反転
flipped_ud = np.flipud(arr_2d)
print("\n上下反転 (np.flipud):\n", flipped_ud)

 

出力例

 

元の2D配列:
 [[1 2 3]
 [4 5 6]
 [7 8 9]]

上下反転 (np.flipud):
 [[7 8 9]
 [4 5 6]
 [1 2 3]]

 

3. 左右反転に特化:np.fliplr()

 

np.fliplr()は、配列の左右を反転させる(列の順序を逆転させる)ための関数です。これはnp.flip(m, axis=1)と全く同じ結果を返します。主に2次元以上の配列(画像など)で使われます。

 

書式

 

Python
 
numpy.fliplr(m)
  • m: 左右反転させたい入力配列。

 

サンプルコード

 

Python
 
import numpy as np

arr_2d = np.array([[1, 2, 3],
                   [4, 5, 6],
                   [7, 8, 9]])
print("元の2D配列:\n", arr_2d)

# 左右反転
flipped_lr = np.fliplr(arr_2d)
print("\n左右反転 (np.fliplr):\n", flipped_lr)

 

出力例

 

元の2D配列:
 [[1 2 3]
 [4 5 6]
 [7 8 9]]

左右反転 (np.fliplr):
 [[3 2 1]
 [6 5 4]
 [9 8 7]]

 

4. 画像処理での応用例

 

これらの反転関数は、画像処理において非常に頻繁に利用されます。画像をNumPy配列として読み込めば、これらの関数を直接適用できます。

 

サンプルコード(画像の上下・左右反転)

 

Python
 
import numpy as np
from PIL import Image

# ダミー画像を生成 (青色の300x400画像)
img_np = np.zeros((300, 400, 3), dtype=np.uint8)
img_np[:,:,0] = 255 # 青 (RGB: R=0, G=0, B=255)

# 中央に緑の四角を描画
img_np[100:200, 150:250, 1] = 255 # Green (RGB: R=0, G=255, B=0)

print(f"元の画像配列の形状: {img_np.shape}")

# 画像を上下反転
flipped_ud_img = np.flipud(img_np)
# Pillowで画像として保存
img_pil_ud = Image.fromarray(flipped_ud_img, mode='RGB')
img_pil_ud.save('flipped_ud_image.png')
print("画像を上下反転して 'flipped_ud_image.png' として保存しました。")

# 画像を左右反転
flipped_lr_img = np.fliplr(img_np)
# Pillowで画像として保存
img_pil_lr = Image.fromarray(flipped_lr_img, mode='RGB')
img_pil_lr.save('flipped_lr_image.png')
print("画像を左右反転して 'flipped_lr_image.png' として保存しました。")

 

まとめ

 

NumPyの反転関数は、配列の要素の順序を効率的に逆転させるためのシンプルなツールです。

  • np.flip(m, axis=None): 最も汎用的で、指定した軸または配列全体を反転させます。

  • np.flipud(m): 配列の上下を反転させる専用関数(np.flip(m, axis=0)と同じ)。

  • np.fliplr(m): 配列の左右を反転させる専用関数(np.flip(m, axis=1)と同じ)。

これらの関数は、データの整理、画像処理におけるミラーリング効果、機械学習におけるデータ拡張など、多岐にわたる分野で活用されます。NumPyの反転機能を使いこなして、データ操作の幅を広げてください!↩️