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)
6 Réponses :
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)
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)
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)
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)
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)
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]]