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.
- numpy.flip โ Manuel de NumPy v1.16
- numpy.flipud โ Manuel de NumPy v1.16
- numpy.fliplr โ Manuel de NumPy v1.16
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
Cela รฉquivaut ร inverser tous les axes ร l’aide de tranches.
print(a_2d[::-1, ::-1]) # [[5 4 3] # [2 1 0]]
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]
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]]]
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]]]
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]]]
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]]]
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]]]
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.
- Traitement d’images avec Python, NumPy
- Lecture et sauvegarde de fichiers image avec Python, OpenCV (imread, imwrite)
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.

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')



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