矩阵翻转水平或垂直

时间:2019-02-13 09:55:04

标签: python numpy matrix flip

我正在尝试编写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]]  

7 个答案:

答案 0 :(得分:1)

我发现可能是问题所在,当您将列表分配给另一个列表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)

答案 1 :(得分:1)

试试这个:

dupes = {f'{col}_': int(col) for col in df.columns if col.isdigit()}
df = df.assign(**dupes)
df = df.reindex(reversed(sorted(df.columns)), axis=1).rename(columns=dupes)

#     name    hobby        date country  5       5  20      20  15      15  10      10
# 0   Toby   Guitar  2020-01-19  Brazil  5  0.1245  20  0.2264  15  0.7763  10  0.2543
# 1  Linda  Cooking  2020-03-05   Italy  5  0.5411  20  0.3342  15     Nan  10  0.2213
# 2    Ben   Diving  2020-04-02     USA  5  0.8843  20  0.2122  15  0.4486  10  0.2333

答案 2 :(得分:0)

def matrixflip(m,d):     如果d =='h':         m =甲基         对于范围(0,len(m),1)中的i:                     m [i] .reverse()         回报(米)     elif d =='v':         m =甲基         m.reverse()         回报(米)     其他:        return(m)

答案 3 :(得分:0)

尝试这个

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)

答案 4 :(得分:0)

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)   

答案 5 :(得分:0)

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)

答案 6 :(得分:0)

有趣的问题。您可以使用numpy函数翻转。

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

对于水平翻转,请使用索引0:

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

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

对于垂直翻转,使用索引1:

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

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