2016-02-14 97 views
2

我创建了一个成功旋转矩阵外层的函数。我已经尝试添加一个循环,以便它为矩阵的内层做同样的事情,但我没有任何运气。使用python旋转矩阵时出错

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 

有没有一种方法可以稍微改变这一点,以允许旋转内层?

我想这样做,而不使用任何库或内置函数。

+0

我不想打扰你太多,但范围()是一个内置函数,你不想使用;)。 –

+1

不够公平,但我的意思是没有建立在处理矩阵的函数中。 – 123

+0

我觉得这个问题的标题有点误导。当我认为'旋转矩阵'时,我认为'通过旋转变换来乘以矩阵'。 –

回答

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

也许您在寻找numpy.transpose()

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

我试图做到这一点,没有任何图书馆。我可能应该在问题中指出这一点。 – 123

0

你觉得如在下面使用zip()什么:

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

我知道zip,我只是想从零开始实现这个功能,所以我可以理解如何使用矩阵更好一点。 – 123