麻烦旋转矩阵与python

时间:2016-02-14 08:51:12

标签: python matrix

我创建了一个成功旋转矩阵外层的函数。我已经尝试添加一个循环,以便它对矩阵的内部层做同样的事情,但我没有运气。

def rotateMatrix(mat,size):
    temp = []
    for i in range(size):
        temp.append(mat[0][i])
    for i in range(size-1):
        mat[0][i] = mat[size-(1+i)][0]
        mat[size-(1+i)][0] = mat[size-1][size-(1+i)]
        mat[size-1][size-(1+i)] = mat[0+i][size-1]
        mat[0+i][size-1] = temp[i]
    return mat

有没有办法可以稍微改变一下以允许旋转内层?

我试图在不使用任何库或内置函数的情况下执行此操作。

3 个答案:

答案 0 :(得分:1)

也许您正在寻找numpy.transpose()

>>> import numpy as np
>>> x = np.array([[0, 1], [2, 3]])
>>> np.transpose(x)
array([[0, 2],
       [1, 3]])

答案 1 :(得分:1)

这会将矩阵旋转90度 请注意,旋转不是就地完成的,而是为结果分配了另一个矩阵。

def rotate_matrix(matrix):
    size = len(matrix) 
    # init rotated matrix with None elements
    rotated_matrix = [[None]*size for _ in range(size)]
    for i in xrange(size):
        for j in xrange(size):
            rotated_matrix[j][size-1-i] = matrix[i][j]
    return rotated_matrix


matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]]
rotated_matrix = rotate_matrix(matrix)
print rotated_matrix
>> [[7, 4, 1],
>>  [8, 5, 2],
>>  [9, 6, 3]]

答案 2 :(得分:0)

您如何看待使用zip(),如下所示:

>>> a = [[0, 1], [2, 3]]
>>> list(zip(*a))
[(0, 2), (1, 3)]
>>> list(map(list, list(zip(*a))))
[[0, 2], [1, 3]]