logo

Transponovať matricu v jednej línii v Pythone

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 Androidom
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) 

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.

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) 

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.

Python
import 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

Python
import 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.

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') 

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