Transponuj macierz w pojedynczej linii w Pythonie

Transpozycja macierzy w Pythonie oznacza odwrócenie jej po przekątnej, zamieniając wszystkie wiersze w kolumny i wszystkie kolumny w wiersze. Na przykład e macierz taka jak [[1 2] [3 4] [5 6]], która ma 3 wiersze i 2 kolumny, staje się po transpozycji [[1 3 5] [2 4 6]], która ma 2 wiersze i 3 kolumny. Rozumiemy różne metody, aby to skutecznie zrobić.

Korzystanie ze zrozumienia list

Rozumienie listy służy do iteracji po każdym elemencie macierzy. W podanym przykładzie iterujemy po każdym elemencie macierzy (m) w sposób kolumnowy i przypisujemy wynik do macierzy rez, która jest transpozycją m.

Python
   m   =   [[  1     2  ]   [  3     4  ]   [  5     6  ]]   res   =   [[  m  [  j  ][  i  ]   for   j   in   range  (  len  (  m  ))]   for   i   in   range  (  len  (  m  [  0  ]))]   for   row   in   res  :   print  (  row  )   

Wyjście
[1 3 5] [2 4 6]  

Wyjaśnienie: To wyrażenie tworzy nową macierz, pobierając każdą kolumnę z oryginału jako wiersz w nowej. Zamienia wiersze z kolumnami.

W śpiewaj zip

Python Zip zwraca iterator krotek, gdzie i-ta krotka zawiera i-ty element z każdej sekwencji argumentów lub elementów iterowalnych. W tym przykładzie rozpakowujemy naszą tablicę za pomocą *, a następnie zipujemy ją, aby uzyskać transpozycję.

Python
   m   =   [(  1     2     3  )   (  4     5     6  )   (  7     8     9  )   (  10     11     12  )]   t_m   =   zip  (  *  m  )   for   row   in   t_m  :   print  (  row  )   

Wyjście
(1 4 7 10) (2 5 8 11) (3 6 9 12)  

Wyjaśnienie: Ten kod transponuje macierz M używając zamek(*m) . Znak * rozpakowuje wiersze i zamek błyskawiczny() grupuje elementy kolumnowo. Każda krotka wyjściowa reprezentuje kolumnę z oryginalnej macierzy, skutecznie zamieniając wiersze i kolumny.

Korzystanie z NumPy

Python NumPy to pakiet do przetwarzania tablic ogólnego przeznaczenia, zaprojektowany do wydajnego manipulowania dużymi tablicami wielowymiarowymi.

Przykład 1: Metoda transpose zwraca transponowany widok przekazanej macierzy wielowymiarowej.

Python
   import   numpy   m   =   [[  1     2     3  ]   [  4     5     6  ]]   print  (  numpy  .  transpose  (  m  ))   

Wyjście
[[1 4] [2 5] [3 6]]  

Objaśnienie: numpy.transpose() zamień wiersze i kolumny macierzy m. Konwertuje oryginalną macierz złożoną z 2 wierszy i 3 kolumn w jedną, przy czym 3 wiersze i 2 kolumny skutecznie ją transponują.

Przykład 2: Użycie „.T” po zmiennej

Python
   import   numpy   as   np   m   =   np  .  array  ([[  1     2     3  ]   [  4     5     6  ]])   print  (  m  .  T  )   

Wyjście
[[1 4] [2 5] [3 6]]  

Wyjaśnienie: Ten kod używa NumPy do utworzenia tablicy 2D m, a następnie wypisuje jej transpozycję za pomocą .T . The .T atrybut zamienia wiersze i kolumny, przekształcając oryginalną macierz 2x3 w transponowaną macierz 3x2.

Korzystanie z Itertools

Python itertools to moduł udostępniający różne funkcje działające na iteratorach w celu tworzenia złożonych iteratorów. chain() to funkcja, która pobiera serię iteracji i zwraca jedną iterowalną.

Python
   from   itertools   import   chain   import   time   import   numpy   as   np   def   transpose2  (  M  ):   M   =   M  .  tolist  ()   n   =   len  (  M  [  0  ])   L   =   list  (  chain  (  *  M  ))   return   [  L  [  i  ::  n  ]   for   i   in   range  (  n  )]   m   =   np  .  array  ([[  1     2     3  ]   [  4     5     6  ]])   start   =   time  .  time_ns  ()   res   =   transpose2  (  m  )   end   =   time  .  time_ns  ()   print  (  res  )   print  (  'Time taken'     end   -   start     'ns'  )   

Wyjście
[[1 4] [2 5] [3 6]] Time taken 9813 ns  

Wyjaśnienie: Najpierw konwertuje macierz na listę list, spłaszcza ją w pojedynczą listę za pomocą metody chain(*M), a następnie odbudowuje transponowaną macierz, przecinając każdy n-ty element.

Powiązane artykuły:

  • Rozumienie listy
  • Itertoole Pythona
  • Zamek w Pythonie
  • łańcuch()
  • krotki
  • Python NumPy