Prenesite matrico v eni vrstici v Pythonu

Prenos matrice v Pythonu pomeni, da jo prelijemo čez svojo diagonalno pretvorbo vseh vrstic v stolpce in vse stolpce v vrstice. Za Exampl e a matrika, kot je [[1 2] [3 4] [5 6]], ki ima 3 vrstice in 2 stolpca postane [[1 3 5] [2 4 6]], ki ima 2 vrstice in 3 stolpce po prenosu. Razumejmo različne metode za to učinkovito.

Z uporabo razumevanja seznama

Razumevanje seznama se uporablja za ponovitev skozi vsak element v matrici. V danem primeru ponovimo skozi vsak element matrice (m) na način-stolpca in rezultat dodelimo matriki REZ, ki je prenos 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  )   

Izhod
[1 3 5] [2 4 6]  

Pojasnilo: Ta izraz ustvari novo matrico tako, da vsak stolpec iz izvirnika vzame kot vrstico v novi. Zamenja vrstice s stolpci.

V pojem Zip

Python Zip vrne iterator tuple, kjer i-th tuple vsebuje i-th element iz vsake od sekvenc argumentov ali iterable. V tem primeru odpenjamo svoj matriko s * in ga nato zadržite, da dobimo prenos.

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  )   

Izhod
(1 4 7 10) (2 5 8 11) (3 6 9 12)  

Pojasnilo: Ta koda prenaša matrico m z uporabo Zip (*m) . * Razpakira vrstice in Zip () Skupine elementov v stolpcu. Vsak izhodni nabor predstavlja stolpec iz prvotne matrice, ki učinkovito zamenja vrstice in stolpce.

Z uporabo Numpy

Python Numpy je splošni paket za obdelavo matrike, zasnovan za učinkovito manipulacijo z velikimi večdimenzionalnimi nizi.

Primer 1: Transpose metoda vrne preneseni pogled na večdimenzionalno matrico.

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

Izhod
[[1 4] [2 5] [3 6]]  

Pojasnilo: numpy.transpose () Zamenjave vrstice in stolpci matrice m. Originalno matrico 2 vrstic in 3 stolpce pretvori v eno s 3 vrsticami in 2 stolpci, ki jo učinkovito prenašata.

Primer 2: Z uporabo '.t' po spremenljivki

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

Izhod
[[1 4] [2 5] [3 6]]  

Pojasnilo: Ta koda uporablja NumPy, da ustvari 2D matriko m, nato pa svoj prenos natisne s pomočjo .T . The .T Atribute zamenjave vrstic in stolpcev, ki pretvorijo originalno matrico 2x3 v 3x2 transponirano matrico.

Uporaba itertools

Python Itertools je modul, ki zagotavlja različne funkcije, ki delujejo na iteratorjih za izdelavo zapletenih iteratorjev. Chain () je funkcija, ki vzame vrsto iterable in ga vrne itablet.

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

Izhod
[[1 4] [2 5] [3 6]] Time taken 9813 ns  

Pojasnilo: Matrico najprej pretvori na seznam seznamov, ki jo spusti v en seznam z uporabo verige (*m), nato obnovi prenosno matrico z rezanjem vsakega N-th elementa.

Povezani članki:

  • Razumevanje seznama
  • Python itertools
  • Python Zip
  • veriga ()
  • Tuples
  • Python Numpy