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