Skip to content

En utilisant ๐งโ€Œ๐ฎโ€Œ๐ฆโ€Œ๐ฉโ€Œ๐ฒโ€Œ.๐Ÿโ€Œ๐ฅโ€Œ๐ขโ€Œ๐ฉโ€Œ(), vous pouvez retourner le tableau NumPy ๐งโ€Œ๐โ€Œ๐šโ€Œ๐ซโ€Œ๐ซโ€Œ๐šโ€Œ๐ฒโ€Œ verticalement (haut-bas) ou horizontalement (gauche-droite). Il existe รฉgalement ๐งโ€Œ๐ฎโ€Œ๐ฆโ€Œ๐ฉโ€Œ๐ฒโ€Œ.๐Ÿโ€Œ๐ฅโ€Œ๐ขโ€Œ๐ฉโ€Œ๐ฎโ€Œ๐โ€Œ() spรฉcialisรฉ pour le retour vertical et ๐งโ€Œ๐ฎโ€Œ๐ฆโ€Œ๐ฉโ€Œ๐ฒโ€Œ.๐Ÿโ€Œ๐ฅโ€Œ๐ขโ€Œ๐ฉโ€Œ๐ฅโ€Œ๐ซโ€Œ() spรฉcialisรฉ pour le retournement horizontal.

Cet article dรฉcrit le contenu suivant.

  • Retourner ๐งโ€Œ๐โ€Œ๐šโ€Œ๐ซโ€Œ๐ซโ€Œ๐šโ€Œ๐ฒโ€Œ verticalement : ๐งโ€Œ๐ฉโ€Œ.๐Ÿโ€Œ๐ฅโ€Œ๐ขโ€Œ๐ฉโ€Œ๐ฎโ€Œ๐โ€Œ()
  • Retourner ๐งโ€Œ๐โ€Œ๐šโ€Œ๐ซโ€Œ๐ซโ€Œ๐šโ€Œ๐ฒโ€Œ horizontalement : ๐งโ€Œ๐ฉโ€Œ.๐Ÿโ€Œ๐ฅโ€Œ๐ขโ€Œ๐ฉโ€Œ๐ฅโ€Œ๐ซโ€Œ()
  • Inverser ๐งโ€Œ๐โ€Œ๐šโ€Œ๐ซโ€Œ๐ซโ€Œ๐šโ€Œ๐ฒโ€Œ le long de n’importe quel axe : ๐งโ€Œ๐ฉโ€Œ.๐Ÿโ€Œ๐ฅโ€Œ๐ขโ€Œ๐ฉโ€Œ()
    • Comportement par dรฉfaut
    • Spรฉcifiez l’axe ร  retourner : ๐šโ€Œ๐ฑโ€Œ๐ขโ€Œ๐ฌโ€Œ
  • Retourner l’image verticalement et horizontalement

Il est รฉgalement possible d’inverser avec slice ::-1 sans utiliser ces fonctions.

Retourner ๐งโ€Œ๐โ€Œ๐šโ€Œ๐ซโ€Œ๐ซโ€Œ๐šโ€Œ๐ฒโ€Œ verticalement : ๐งโ€Œ๐ฉโ€Œ.๐Ÿโ€Œ๐ฅโ€Œ๐ขโ€Œ๐ฉโ€Œ๐ฎโ€Œ๐โ€Œ()

Utilisez ๐งโ€Œ๐ฎโ€Œ๐ฆโ€Œ๐ฉโ€Œ๐ฒโ€Œ.๐Ÿโ€Œ๐ฅโ€Œ๐ขโ€Œ๐ฉโ€Œ๐ฎโ€Œ๐โ€Œ() pour retourner ๐งโ€Œ๐โ€Œ๐šโ€Œ๐ซโ€Œ๐ซโ€Œ๐šโ€Œ๐ฒโ€Œ verticalement. ๐ฎโ€Œ๐โ€Œ signifie ยซ Haut ยป et ยซ Bas ยป.

๐งโ€Œ๐ฎโ€Œ๐ฆโ€Œ๐ฉโ€Œ๐ฒโ€Œ.๐Ÿโ€Œ๐ฅโ€Œ๐ขโ€Œ๐ฉโ€Œ๐ฎโ€Œ๐โ€Œ() renvoie une vue. ร‰tant donnรฉ qu’une vue partage la mรฉmoire avec le tableau d’origine, la modification d’une valeur modifie l’autre.

import numpy as np a_2d = np.arange(6).reshape(2, 3) print(a_2d) # [[0 1 2] # [3 4 5]] a_2d_flipud = np.flipud(a_2d) print(a_2d_flipud) # [[3 4 5] # [0 1 2]] print(np.shares_memory(a_2d, a_2d_flipud)) # True 

Si vous souhaitez traiter des donnรฉes sรฉparรฉes, utilisez ๐œโ€Œ๐จโ€Œ๐ฉโ€Œ๐ฒโ€Œ() .

a_2d_flipud_copy = np.flipud(a_2d).copy() print(a_2d_flipud_copy) # [[3 4 5] # [0 1 2]] print(np.shares_memory(a_2d, a_2d_flipud_copy)) # False 

๐งโ€Œ๐ฎโ€Œ๐ฆโ€Œ๐ฉโ€Œ๐ฒโ€Œ.๐Ÿโ€Œ๐ฅโ€Œ๐ขโ€Œ๐ฉโ€Œ๐ฎโ€Œ๐โ€Œ() est รฉquivalent ร  slice [::-1] . Le tableau s’inverse le long du premier axe.

print(a_2d[::-1]) # [[3 4 5] # [0 1 2]] 

Il en va de mรชme pour les tableaux unidimensionnels et multidimensionnels de trois dimensions ou plus, oรน le tableau est inversรฉ le long du premier axe. Dans le cas d’un tableau unidimensionnel, l’impression est diffรฉrente de celle d’un tableau ยซ vertical ยป, alors soyez prudent.

a_1d = np.arange(3) print(a_1d) # [0 1 2] print(np.flipud(a_1d)) # [2 1 0] print(a_1d[::-1]) # [2 1 0] 

a_3d = np.arange(24).reshape(2, 3, 4) print(a_3d) # [[[ 0 1 2 3] # [ 4 5 6 7] # [ 8 9 10 11]] #  # [[12 13 14 15] # [16 17 18 19] # [20 21 22 23]]] print(np.flipud(a_3d)) # [[[12 13 14 15] # [16 17 18 19] # [20 21 22 23]] #  # [[ 0 1 2 3] # [ 4 5 6 7] # [ 8 9 10 11]]] print(a_3d[::-1]) # [[[12 13 14 15] # [16 17 18 19] # [20 21 22 23]] #  # [[ 0 1 2 3] # [ 4 5 6 7] # [ 8 9 10 11]]] 

Si vous souhaitez retourner le tableau multidimensionnel le long de n’importe quel axe, utilisez ๐งโ€Œ๐ฎโ€Œ๐ฆโ€Œ๐ฉโ€Œ๐ฒโ€Œ.๐Ÿโ€Œ๐ฅโ€Œ๐ขโ€Œ๐ฉโ€Œ() dรฉcrit plus loin.

Retourner ๐งโ€Œ๐โ€Œ๐šโ€Œ๐ซโ€Œ๐ซโ€Œ๐šโ€Œ๐ฒโ€Œ horizontalement : ๐งโ€Œ๐ฉโ€Œ.๐Ÿโ€Œ๐ฅโ€Œ๐ขโ€Œ๐ฉโ€Œ๐ฅโ€Œ๐ซโ€Œ()

Utilisez ๐งโ€Œ๐ฎโ€Œ๐ฆโ€Œ๐ฉโ€Œ๐ฒโ€Œ.๐Ÿโ€Œ๐ฅโ€Œ๐ขโ€Œ๐ฉโ€Œ๐ฅโ€Œ๐ซโ€Œ() pour retourner ๐งโ€Œ๐โ€Œ๐šโ€Œ๐ซโ€Œ๐ซ๐šโ€Œ๐ฒโ€Œ horizontalement. ๐ฅโ€Œ๐ซโ€Œ signifie ยซ Gauche ยป et ยซ Droite ยป.

๐งโ€Œ๐ฎโ€Œ๐ฆโ€Œ๐ฉโ€Œ๐ฒโ€Œ.๐Ÿโ€Œ๐ฅโ€Œ๐ขโ€Œ๐ฉโ€Œ๐ฎโ€Œ๐โ€Œ() renvoie une vue. Si vous souhaitez traiter des donnรฉes sรฉparรฉes, vous pouvez utiliser ๐œโ€Œ๐จโ€Œ๐ฉโ€Œ๐ฒโ€Œ() comme dans l’exemple de ๐งโ€Œ๐ฎโ€Œ๐ฆโ€Œ๐ฉโ€Œ๐ฒโ€Œ.๐Ÿโ€Œ๐ฅโ€Œ๐ขโ€Œ๐ฉโ€Œ๐ฎโ€Œ๐โ€Œ() .

import numpy as np a_2d = np.arange(6).reshape(2, 3) print(a_2d) # [[0 1 2] # [3 4 5]] a_2d_fliplr = np.fliplr(a_2d) print(a_2d_fliplr) # [[2 1 0] # [5 4 3]] print(np.shares_memory(a_2d, a_2d_fliplr)) # True 

๐งโ€Œ๐ฎโ€Œ๐ฆโ€Œ๐ฉโ€Œ๐ฒโ€Œ.๐Ÿโ€Œ๐ฅโ€Œ๐ขโ€Œ๐ฉโ€Œ๐ฅโ€Œ๐ซโ€Œ() est รฉquivalent ร  slice [:, ::-1] . Le tableau s’inverse le long du deuxiรจme axe.

print(a_2d[:, ::-1]) # [[2 1 0] # [5 4 3]] 

Il en va de mรชme pour les tableaux unidimensionnels et multidimensionnels de trois dimensions ou plus, oรน le tableau est inversรฉ le long du deuxiรจme axe. Notez que dans le cas d’un tableau unidimensionnel, une erreur est gรฉnรฉrรฉe car le deuxiรจme axe n’existe pas.

a_1d = np.arange(3) print(a_1d) # [0 1 2] # print(np.fliplr(a_1d)) # ValueError: Input must be >= 2-d. 

a_3d = np.arange(24).reshape(2, 3, 4) print(a_3d) # [[[ 0 1 2 3] # [ 4 5 6 7] # [ 8 9 10 11]] #  # [[12 13 14 15] # [16 17 18 19] # [20 21 22 23]]] print(np.fliplr(a_3d)) # [[[ 8 9 10 11] # [ 4 5 6 7] # [ 0 1 2 3]] #  # [[20 21 22 23] # [16 17 18 19] # [12 13 14 15]]] print(a_3d[:, ::-1]) # [[[ 8 9 10 11] # [ 4 5 6 7] # [ 0 1 2 3]] #  # [[20 21 22 23] # [16 17 18 19] # [12 13 14 15]]] 

Retourner le ndarray le long de n’importe quel axe : ๐งโ€Œ๐ฉโ€Œ.๐Ÿโ€Œ๐ฅโ€Œ๐ขโ€Œ๐ฉโ€Œ()

Utilisez ๐งโ€Œ๐ฎโ€Œ๐ฆโ€Œ๐ฉโ€Œ๐ฒโ€Œ.๐Ÿโ€Œ๐ฅโ€Œ๐ขโ€Œ๐ฉโ€Œ() pour inverser ๐งโ€Œ๐โ€Œ๐šโ€Œ๐ซโ€Œ๐ซโ€Œ๐šโ€Œ๐ฒโ€Œ le long de n’importe quel axe. Il est รฉgalement possible d’inverser le long de plusieurs axes.

Comportement par dรฉfaut

Par dรฉfaut, le tableau est inversรฉ le long de tous les axes. Dans le cas d’un tableau ร  deux dimensions, il est inversรฉ verticalement et horizontalement.

๐งโ€Œ๐ฎโ€Œ๐ฆโ€Œ๐ฉโ€Œ๐ฒโ€Œ.๐Ÿโ€Œ๐ฅโ€Œ๐ขโ€Œ๐ฉโ€Œ() renvoie une vue. Si vous souhaitez traiter des donnรฉes sรฉparรฉes, vous pouvez utiliser ๐œโ€Œ๐จโ€Œ๐ฉโ€Œ๐ฒโ€Œ() comme dans l’exemple de ๐งโ€Œ๐ฎโ€Œ๐ฆโ€Œ๐ฉโ€Œ๐ฒโ€Œ.๐Ÿโ€Œ๐ฅโ€Œ๐ขโ€Œ๐ฉโ€Œ๐ฎโ€Œ๐โ€Œ() .

import numpy as np a_2d = np.arange(6).reshape(2, 3) print(a_2d) # [[0 1 2] # [3 4 5]] a_2d_flip = np.flip(a_2d) print(a_2d_flip) # [[5 4 3] # [2 1 0]] print(np.shares_memory(a_2d, a_2d_flip)) # True 
source : numpy_flip.py

Cela รฉquivaut ร  inverser tous les axes ร  l’aide de tranches.

print(a_2d[::-1, ::-1]) # [[5 4 3] # [2 1 0]] 
source : numpy_flip.py

Il en va de mรชme pour les tableaux unidimensionnels et multidimensionnels de trois dimensions ou plus. Par dรฉfaut, le tableau est inversรฉ le long de tous les axes.

a_1d = np.arange(3) print(a_1d) # [0 1 2] print(np.flip(a_1d)) # [2 1 0] print(a_1d[::-1]) # [2 1 0] 
source : numpy_flip.py

a_3d = np.arange(24).reshape(2, 3, 4) print(a_3d) # [[[ 0 1 2 3] # [ 4 5 6 7] # [ 8 9 10 11]] #  # [[12 13 14 15] # [16 17 18 19] # [20 21 22 23]]] print(np.flip(a_3d)) # [[[23 22 21 20] # [19 18 17 16] # [15 14 13 12]] #  # [[11 10 9 8] # [ 7 6 5 4] # [ 3 2 1 0]]] print(a_3d[::-1, ::-1, ::-1]) # [[[23 22 21 20] # [19 18 17 16] # [15 14 13 12]] #  # [[11 10 9 8] # [ 7 6 5 4] # [ 3 2 1 0]]] 
source : numpy_flip.py

Spรฉcifiez l’axe ร  retourner : ๐šโ€Œ๐ฑโ€Œ๐ขโ€Œ๐ฌโ€Œ

L’axe ร  inverser peut รชtre spรฉcifiรฉ par le deuxiรจme argument ๐šโ€Œ๐ฑโ€Œ๐ขโ€Œ๐ฌโ€Œ . ๐šโ€Œ๐ฑโ€Œ๐ขโ€Œ๐ฌโ€Œ=0 est รฉquivalent ร  ๐Ÿโ€Œ๐ฅโ€Œ๐ขโ€Œ๐ฉโ€Œ๐ฎโ€Œ๐โ€Œ() et ๐šโ€Œ๐ฑโ€Œ๐ขโ€Œ๐ฌโ€Œ=1 ร  ๐Ÿโ€Œ๐ฅโ€Œ๐ขโ€Œ๐ฉโ€Œ๐ฅโ€Œ๐ซโ€Œ() .

print(np.flip(a_3d, 0)) # [[[12 13 14 15] # [16 17 18 19] # [20 21 22 23]] #  # [[ 0 1 2 3] # [ 4 5 6 7] # [ 8 9 10 11]]] print(a_3d[::-1]) # [[[12 13 14 15] # [16 17 18 19] # [20 21 22 23]] #  # [[ 0 1 2 3] # [ 4 5 6 7] # [ 8 9 10 11]]] print(np.flipud(a_3d)) # [[[12 13 14 15] # [16 17 18 19] # [20 21 22 23]] #  # [[ 0 1 2 3] # [ 4 5 6 7] # [ 8 9 10 11]]] 
source : numpy_flip.py

print(np.flip(a_3d, 1)) # [[[ 8 9 10 11] # [ 4 5 6 7] # [ 0 1 2 3]] #  # [[20 21 22 23] # [16 17 18 19] # [12 13 14 15]]] print(a_3d[:, ::-1]) # [[[ 8 9 10 11] # [ 4 5 6 7] # [ 0 1 2 3]] #  # [[20 21 22 23] # [16 17 18 19] # [12 13 14 15]]] print(np.fliplr(a_3d)) # [[[ 8 9 10 11] # [ 4 5 6 7] # [ 0 1 2 3]] #  # [[20 21 22 23] # [16 17 18 19] # [12 13 14 15]]] 
source : numpy_flip.py

print(np.flip(a_3d, 2)) # [[[ 3 2 1 0] # [ 7 6 5 4] # [11 10 9 8]] #  # [[15 14 13 12] # [19 18 17 16] # [23 22 21 20]]] print(a_3d[:, :, ::-1]) # [[[ 3 2 1 0] # [ 7 6 5 4] # [11 10 9 8]] #  # [[15 14 13 12] # [19 18 17 16] # [23 22 21 20]]] 
source : numpy_flip.py

Vous pouvez dรฉfinir plusieurs axes pour ๐šโ€Œ๐ฑโ€Œ๐ขโ€Œ๐ฌโ€Œ en utilisant ๐ญโ€Œ๐ฎโ€Œ๐ฉโ€Œ๐ฅโ€Œ๐žโ€Œ ou ๐ฅโ€Œ๐ขโ€Œ๐ฌโ€Œ๐ญโ€Œ .

print(np.flip(a_3d, (1, 2))) # [[[11 10 9 8] # [ 7 6 5 4] # [ 3 2 1 0]] #  # [[23 22 21 20] # [19 18 17 16] # [15 14 13 12]]] print(a_3d[:, ::-1, ::-1]) # [[[11 10 9 8] # [ 7 6 5 4] # [ 3 2 1 0]] #  # [[23 22 21 20] # [19 18 17 16] # [15 14 13 12]]] 
source : numpy_flip.py

Le fonctionnement de ๐Ÿโ€Œ๐ฅโ€Œ๐ขโ€Œ๐ฉโ€Œ() est rรฉsumรฉ ci-dessous.

flip(m, 0) est รฉquivalent ร  flipud(m).
flip(m, 1) est รฉquivalent ร  fliplr(m).
flip(m, n) correspond ร  m[…,::-1,…] avec ::-1 ร  la position n.
flip(m) correspond ร  m[::-1,::-1,…,::-1] avec ::-1 ร  toutes les positions.
flip(m, (0, 1)) correspond ร  m[::-1,::-1,…] avec ::-1 ร  la position 0 et ร  la position 1.
numpy.flip โ€” Manuel de NumPy v1.16

Retourner l’image verticalement et horizontalement

Les fichiers image peuvent รชtre lus sous forme de tableau NumPy ๐งโ€Œ๐โ€Œ๐šโ€Œ๐ซโ€Œ๐ซโ€Œ๐šโ€Œ๐ฒโ€Œ en utilisant des bibliothรจques telles que Pillow (PIL) et OpenCV.

Vous pouvez retourner l’image verticalement et horizontalement en utilisant ๐งโ€Œ๐ฎโ€Œ๐ฆโ€Œ๐ฉโ€Œ๐ฒโ€Œ.๐Ÿโ€Œ๐ฅโ€Œ๐ขโ€Œ๐ฉโ€Œ() , ๐งโ€Œ๐ฎโ€Œ๐ฆโ€Œ๐ฉโ€Œ๐ฒโ€Œ.๐Ÿโ€Œ๐ฅโ€Œ๐ขโ€Œ๐ฉโ€Œ๐ฎโ€Œ๐โ€Œ() , ๐งโ€Œ๐ฎโ€Œ๐ฆโ€Œ๐ฉโ€Œ๐ฒโ€Œ.๐Ÿโ€Œ๐ฅโ€Œ๐ขโ€Œ๐ฉโ€Œ๐ฅโ€Œ๐ซโ€Œ() L’exemple suivant utilise une image couleur (tableau tridimensionnel), mais la spรฉcification des arguments est la mรชme pour les images grises (tableau bidimensionnel).

L’image suivante est utilisรฉe comme exemple.

Lรฉna

Un exemple de code et des rรฉsultats sont ci-dessous.

import numpy as np from PIL import Image img = np.array(Image.open('data/src/lena.jpg')) print(type(img)) # <class 'numpy.ndarray'> print(img.shape) # (225, 400, 3) Image.fromarray(np.flipud(img)).save('data/dst/lena_np_flipud.jpg') Image.fromarray(np.fliplr(img)).save('data/dst/lena_np_fliplr.jpg') Image.fromarray(np.flip(img, (0, 1))).save('data/dst/lena_np_flip_ud_lr.jpg') 

image de nupmy flipud

image fliplr de nupmy

image de retournement de nupmy

Vous pouvez รฉgalement faire pivoter les images avec les fonctions OpenCV.