Transponovanie matrice v Pythone znamená, že ju prehodenie cez jej diagonálne premenenie všetkých riadkov na stĺpce a všetky stĺpce na riadky. Na skúšku e matica ako [[1 2] [3 4] [5 6]], ktorá má 3 riadky a 2 stĺpce, sa stáva [[1 3 5] [2 4 6]], ktorá má po transponovaní 2 riadky a 3 stĺpce. Pochopíme rôzne metódy, ako to efektívne urobiť.
Pomocou porozumenia zoznamu
Porozumenie zoznamu sa používa na iterovanie prostredníctvom každého prvku v matrici. V danom príklade iterujeme každý prvok matice (m) spôsobom a priraďujeme výsledok matici Rez, ktorá je transpozíciou m.
IMMS hry s AndroidomPython
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)
Výstup
[1 3 5] [2 4 6]
Vysvetlenie: Tento výraz vytvára novú maticu tým, že každý stĺpec z originálu vezme ako rad v novom. Vymení riadky za stĺpce.
V spievať zips
Python Zip vracia iterátor n-tikov, kde I-t-tuple obsahuje prvok I-TH z každej z argumentových sekvencií alebo iterových. V tomto príklade rozbalíme naše pole pomocou * a potom ho zipsom, aby sme dostali transpozíciu.
Pythonm = [(1 2 3) (4 5 6) (7 8 9) (10 11 12)] t_m = zip(*m) for row in t_m: print(row)
Výstup
(1 4 7 10) (2 5 8 11) (3 6 9 12)
Vysvetlenie: Tento kód prenáša maticu m využívanie zips (*m) . * Rozbalí riadky a zips () Skupiny prvky stĺpce. Každý výstupný Tuple predstavuje stĺpec z pôvodnej matice efektívne výmenné riadky a stĺpce.
S použitím numpy
Python Numpy je balík na spracovanie polí všeobecne účtovný na efektívne manipuláciu s veľkými viacrozmernými poliami.
Príklad 1: Metóda transpozície vracia transponovaný pohľad na odovzdanú multi-dimenzionálnu maticu.
Pythonimport numpy m = [[1 2 3] [4 5 6]] print(numpy.transpose(m))
Výstup
[[1 4] [2 5] [3 6]]
Vysvetlenie: numpy.transpose () vymenené riadky a stĺpce matice m. Prevedie pôvodnú maticu 2 riadkov a 3 stĺpcov na jeden s 3 riadkami a 2 stĺpcami, ktoré ju efektívne prenášajú.
Príklad 2: Použitie „.t“ po premennej
Pythonimport numpy as np m = np.array([[1 2 3] [4 5 6]]) print(m.T)
Výstup
[[1 4] [2 5] [3 6]]
Vysvetlenie: Tento kód používa Numpy na vytvorenie 2D poľa M a potom vytlačí jeho transpozíciu pomocou .T . Ten .T Riadky a stĺpce atribútov prevedenia pôvodnej matice 2x3 na transponovanú maticu 3x2.
Používanie itertools
Python IterTools je modul, ktorý poskytuje rôzne funkcie, ktoré pracujú na iterátoroch na výrobe zložitých iterátorov. Chain () je funkcia, ktorá berie sériu iterových a vráti jednu z nich.
Pythonfrom 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')
Výstup
[[1 4] [2 5] [3 6]] Time taken 9813 ns
Vysvetlenie: Najprv prevedie maticu na zoznam zoznamov splošuje ju do jedného zoznamu pomocou reťazca (*m) a potom prestavuje transponovanú maticu nakrájaním každého prvku N-TH.
príkaz arp
Súvisiace články:
- Porozumenie zoznamu
- Python itertools
- Python zips
- reťaz ()
- numps
- Python numpy