Матрица перевернуть горизонтально или вертикально - PullRequest
0 голосов
/ 13 февраля 2019

Я пытаюсь написать функцию Python, чтобы перевернуть матрицу по горизонтали или вертикали.Написать функцию Python matrixflip (m, d), которая принимает в качестве входных данных двумерную матрицу m и направление d, где d - это либо «h», либо «v».Если d == 'h', функция должна возвращать матрицу, перевернутую горизонтально.Если d == 'v', функция должна перенастроить матрицу, перевернутую вертикально.Для любого другого значения d функция должна возвращать m без изменений.Во всех случаях аргумент m должен оставаться незатронутым функцией.

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)

Я ожидаю, что результат будет равен

>>> 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]]  

Ответы [ 5 ]

0 голосов
/ 18 февраля 2019
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 голосов
/ 16 февраля 2019
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 голосов
/ 13 февраля 2019

Я обнаружил, в чем может быть проблема, когда вы назначаете список другому списку m = myl, вы не создаете новую копию этого списка для воспроизведения, поэтому любые изменения в m будут влиять на myl.Заменив его на tempm = m.copy(), вы получите новую версию списка, которую можно согнуть по вашему желанию.Следующее должно работать хорошо:

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 голосов
/ 16 февраля 2019

Попробуйте это

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 голосов
/ 13 февраля 2019

def matrixflip (m, d): если d == 'h': m = myl для i в диапазоне (0, len (m), 1): m [i] .reverse () return (m) elifd == 'v': m = myl m.reverse () return (m) иначе: return (m)

...