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.

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.

Súvisiace články:

  • Porozumenie zoznamu
  • Python itertools
  • Python zips
  • reťaz ()
  • numps
  • Python numpy