在Python中,如何将矩阵逆时针旋转90度?

在Python中,如何将矩阵逆时针旋转90度?,python,Python,编辑:最好没有numpy 您可以使用numpy函数rot90 >>> def rotate_matrix( k: List[List[int]]): """ For example, if I have: m = [[1,2,3], [2,3,3], [5,4,3]] rotate_matrix(m) should give me [[3,3,3],[2,3,4],[1,2,5]]. """ 您可以

编辑:最好没有numpy

您可以使用numpy函数rot90

>>> def rotate_matrix( k: List[List[int]]):
    """
    For example, if I have:
    m = [[1,2,3],
         [2,3,3],
         [5,4,3]]
    rotate_matrix(m) should give me [[3,3,3],[2,3,4],[1,2,5]]. 
    """

您可以使用numpy函数rot90

>>> def rotate_matrix( k: List[List[int]]):
    """
    For example, if I have:
    m = [[1,2,3],
         [2,3,3],
         [5,4,3]]
    rotate_matrix(m) should give me [[3,3,3],[2,3,4],[1,2,5]]. 
    """

在纯python中,矩阵逆时针旋转为一行(即不带numpy):

如果要在函数中执行此操作,则

new_matrix = [[m[j][i] for j in range(len(m))] for i in range(len(m[0])-1,-1,-1)]
不管怎样,结果都是

def rotate_matrix( m ):
    return [[m[j][i] for j in range(len(m))] for i in range(len(m[0])-1,-1,-1)]

除此之外,如果您想要通常的转置,那么简单的一行纯python版本是

[[3, 3, 3], [2, 3, 4], [1, 2, 5]]

在纯python中,矩阵逆时针旋转为一行(即不带numpy):

如果要在函数中执行此操作,则

new_matrix = [[m[j][i] for j in range(len(m))] for i in range(len(m[0])-1,-1,-1)]
不管怎样,结果都是

def rotate_matrix( m ):
    return [[m[j][i] for j in range(len(m))] for i in range(len(m[0])-1,-1,-1)]

除此之外,如果您想要通常的转置,那么简单的一行纯python版本是

[[3, 3, 3], [2, 3, 4], [1, 2, 5]]

只需垂直翻转矩阵,然后将右上角三角形与左下角三角形切换

def rotate_90_degree_anticlckwise(matrix):
    new_matrix = []
    for i in range(len(matrix[0]), 0, -1):
        new_matrix.append(list(map(lambda x: x[i-1], matrix)))

    return new_matrix


def rotate_90_degree_clckwise(matrix):
    new_matrix = []
    for i in range(len(matrix[0])):
        li = list(map(lambda x: x[i], matrix))
        li.reverse()
        new_matrix.append(li)

    return new_matrix

def rotate_90_degree_clckwise_by_zip_method(matrix):
    return list(list(x)[::-1] for x in zip(*matrix))

只需垂直翻转矩阵,然后将右上角三角形与左下角三角形切换

def rotate_90_degree_anticlckwise(matrix):
    new_matrix = []
    for i in range(len(matrix[0]), 0, -1):
        new_matrix.append(list(map(lambda x: x[i-1], matrix)))

    return new_matrix


def rotate_90_degree_clckwise(matrix):
    new_matrix = []
    for i in range(len(matrix[0])):
        li = list(map(lambda x: x[i], matrix))
        li.reverse()
        new_matrix.append(li)

    return new_matrix

def rotate_90_degree_clckwise_by_zip_method(matrix):
    return list(list(x)[::-1] for x in zip(*matrix))

我回答了您的问题-如您所问,仅使用python。如果你同意我的回答是正确的,并且忠实于你问题的意图,那么请接受和/或投赞成票。或者,请告诉我你还需要什么,我很乐意帮助你。谢谢,我用pythonidle尝试了这段代码,出于某种原因,它输出的是原始矩阵,而不是旋转矩阵。你能帮忙吗?我只是从答案中复制了代码并运行了它,它很完美。请检查您是否在代码中打印了正确的数组,c.f.print(new_matrix)我回答了您的问题-如您所问,仅使用python。如果你同意我的回答是正确的,并且忠实于你问题的意图,那么请接受和/或投赞成票。或者,请告诉我你还需要什么,我很乐意帮助你。谢谢,我用pythonidle尝试了这段代码,出于某种原因,它输出的是原始矩阵,而不是旋转矩阵。你能帮忙吗?我只是从答案中复制了代码并运行了它,它很完美。请检查您在代码中打印的数组是否正确,c.f.print(new_matrix)我在python IDLE中尝试了该代码,出于某种原因,它输出的是原始矩阵,而不是旋转它。你能帮忙吗?我刚刚从这里复制了代码并运行了它,它很完美。请检查您是否在代码中打印了正确的数组,c.f.print(新矩阵)此代码很好,您能否展开这一行代码以了解情况?谢谢。@VrushalRaut问得好,也许画一幅画(或两幅画)会有帮助。我试过用pythonidle编写代码,出于某种原因,它输出的是原始矩阵,而不是旋转矩阵。你能帮忙吗?我刚刚从这里复制了代码并运行了它,它很完美。请检查您是否在代码中打印了正确的数组,c.f.print(新矩阵)此代码很好,您能否展开这一行代码以了解情况?谢谢。@VrushalRaut问得好,也许画一幅画(或两幅画)会有帮助。“编辑:最好不要numpy。”“编辑:最好不要numpy。”