2016-02-14 129 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