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

Я не хочу вас слишком беспокоить, но range() - встроенная функция, которую вы не хотели использовать;). –

+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

Смежные вопросы