0
votes

Matrix flip horizontal ou vertical

J'essaye d'écrire une fonction python pour retourner une matrice horizontale ou verticale. Pour écrire une fonction Python matrixflip(m,d) qui prend une matrice bidimensionnelle et une direction, où d est soit 'h' ou 'v'. Si d == 'h' , la fonction doit retourner la matrice retournée horizontalement. Si d == 'v' , la fonction doit retourner la matrice inversée verticalement. Pour toute autre valeur de d, la fonction doit renvoyer m inchangé. Dans tous les cas, l'argument m ne doit pas être perturbé par la fonction.

>>> myl = [[1,2],[3,4]]

>>> myl
[[1, 2], [3, 4]]  

>>> matrixflip(myl,'h')
[[2, 1], [4, 3]]

>>> myl
[[1, 2], [3, 4]]  

>>> matrixflip(myl,'v')
[[3, 4], [1, 2]]  

>>> myl
[[1, 2], [3, 4]]  

J'attends la sortie comme

import numpy as np
def matrixflip(m,d):
    m = myl
    myl = np.array([[1, 2], [3, 4]])
    if d=='v': 
        return np.flip(contour, axis=0)
    elif d=='h':
        return np.flip(contour, axis=1)


0 commentaires

6 Réponses :


0
votes
def matrixflip(m,d):
    if d=='h':
        m=myl
        for i in range(0,len(m),1):
                    m[i].reverse()
        return(m)
    elif d=='v':
        m=myl
        m.reverse()
        return(m)
    else:
       return(m)

0 commentaires

1
votes

J'ai trouvé quel peut être le problème, lorsque vous attribuez une liste à une autre liste m = myl vous ne créez pas une nouvelle copie de cette liste pour jouer avec, donc toute modification apportée à m affectera myl. En remplaçant cela par tempm = m.copy() vous obtenez une nouvelle version de la liste qui peut être pliée à votre tempm = m.copy() . Les éléments suivants devraient bien fonctionner:

def matrixflip(m,d):
    tempm = m.copy()
    if d=='h':
        for i in range(0,len(tempm),1):
                tempm[i].reverse()
    elif d=='v':
        tempm.reverse()
    return(tempm)


0 commentaires

0
votes

Essaye celui-là

def matrixflip(a,b):
    temp=[]
    for i in range(len(a)):
        temp=temp+[a[i][:]]
    if b=='h':
        for i in range(len(temp)):
            temp[i].reverse()
            return(temp)

    elif b=='v':
        temp.reverse()
        return(temp)


0 commentaires

0
votes
def matrixflip(a,b):
    temp=[]
    for i in range(len(a)):
        temp=temp+[a[i][:]]
    if b=='h':
        for i in range(len(temp)):
            temp[i].reverse()
            i=i+1
        return temp
    elif b=='v':
      temp.reverse()
      return(temp)   

0 commentaires

0
votes
def matrixflip(a,b):
    temp=[]

    for i in range(len(a)):
        temp=temp+[a[i][:]]

    if b=='h':
      for i in range(0,len(temp),1):
              temp[i].reverse()
    elif b=='v':
        temp.reverse()
    return(temp)

0 commentaires

0
votes

Question interessante. Vous pouvez utiliser la fonction flip numpy.

myl_flip_v = np.flip(myl,1) # vertical flip

>>array([[3, 4],
   [1, 2]])

Pour le retournement horizontal, utilisez l'indice 0:

myl_flip_h = np.flip(myl,0) # horizontal flip

>> array([[2, 1],
   [4, 3]])

Pour le retournement vertical, utilisez l'indice 1:

import numpy as np
myl = [[1,2],[3,4]]


0 commentaires