2012-04-16 17 views
6

Jak zdobyć transpozycję tej matrix..Any łatwiejszego, algorytmiczny sposób to zrobić ...transpozycja macierzy python i zip

1-ty pytanie:

Input a=[[1,2,3],[4,5,6],[7,8,9]] 
Expected output a=[[1, 4, 7], [2, 5, 8], [3, 6, 9]] 

2-ty Pytanie:

Zip daje mi następujące wyjście poniżej, jak mogę skompresować, gdy nie wiem, ile elementów jest w tablicy, w tym przypadku wiem 3 elementy a [0], a [1], a [2], ale w jaki sposób zapinam elementy [n]

>>> zip(a[0],a[1],a[2]) 
[(1, 4, 7), (2, 5, 8), (3, 6, 9)] 

Odpowiedz

11

odpowiedzi pytanie:

>>> import numpy as np 
>>> first_answer = np.transpose(a) 
>>> second_answer = [list(i) for i in zip(*a)] 

thanks AFG dla pomagając

+0

Co z rozwiązaniem pierwszego pytania – Rajeev

+5

@Rajeev To jest odpowiedź na pytania. 'zip (* a)' to transpozycja macierzy i tak samo jest jej odwrotnością. – agf

+0

@agf: Pierwszym wyjściem rozwiązania jest tablica tablic, a nie krotka .. – Rajeev

3

Można użyć numpy.transpose

numpy.transpose

>>> import numpy 
>>> a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] 
>>> numpy.transpose(a) 
array([[1, 4, 7], 
     [2, 5, 8], 
     [3, 6, 9]]) 
10

Zastosowanie zip(*a):

>>> zip(*a) 
[(1, 4, 7), (2, 5, 8), (3, 6, 9)] 

Jak to działa: zip (* a) jest równy zip (a [0], a [1], a [2]).

+1

Zapisałbym to, gdybyś miał 'map (list, zip (* a))' ponieważ odpowiedziałoby na to pytanie bez użycia niestandardowego modułu . – martineau

Powiązane problemy