Transpuneți o matrice într -o singură linie în Python

Transpunerea unei matrice în Python înseamnă să -l răsfoiți peste diagonală, transformând toate rândurile în coloane și toate coloanele în rânduri. Pentru examen E A matrice ca [[1 2] [3 4] [5 6]] care are 3 rânduri și 2 coloane devine [[1 3 5] [2 4 6]] care are 2 rânduri și 3 coloane după transpunere. Să înțelegem diferite metode pentru a face acest lucru eficient.

Folosind înțelegerea listei

Înțelegerea listei este utilizată pentru a itera prin fiecare element din matrice. În exemplul dat, iterăm prin fiecare element al matricei (M) într-o manieră-major de coloană și atribuim rezultatul matricei Rez care este transpunerea lui 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  )   

Ieșire
[1 3 5] [2 4 6]  

Explicaţie: Această expresie creează o nouă matrice luând fiecare coloană din original ca rând în noul. Schimbă rândurile cu coloane.

ÎN cântă fermoar

Python Zip returnează un iterator de tupluri în care I-Th Tuple conține elementul I-Th din fiecare dintre secvențele de argumente sau iterabile. În acest exemplu, ne dezvăluim tabloul folosind * și apoi îl tăiem pentru a obține transpunerea.

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  )   

Ieșire
(1 4 7 10) (2 5 8 11) (3 6 9 12)  

Explicaţie: Acest cod transpune matricea m folosind Zip (*m) . * Despachetează rândurile și ZIP () grupuri elemente înțelepte pe coloană. Fiecare tuple de ieșire reprezintă o coloană din matricea originală care schimbă eficient rândurile și coloanele.

Folosind Numpy

Python Numpy este un pachet de procesare a tablourilor generale de scop general conceput pentru a manipula eficient materii mari multidimensionale.

Exemplul 1: Metoda de transpunere returnează o vedere transpusă a matricei multidimensionale trecute.

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

Ieșire
[[1 4] [2 5] [3 6]]  

Explicație: numpy.transpose () Schimbați rândurile și coloanele matricei m. Convertește matricea originală de 2 rânduri și 3 coloane într -una cu 3 rânduri și 2 coloane care o transpune eficient.

Exemplul 2: Folosind „.t” după variabilă

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

Ieșire
[[1 4] [2 5] [3 6]]  

Explicaţie: Acest cod folosește Numpy pentru a crea un tablou 2d M, apoi imprimă transpunerea acestuia folosind .T . .T Atribute swap -uri și coloane convertind matricea originală 2x3 într -o matrice transpusă 3x2.

Folosind iterTools

Python IterOols este un modul care oferă diverse funcții care funcționează pe iteratori pentru a produce iteratori complexi. Chain () este o funcție care ia o serie de iterabile și returnează unul iterabil.

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

Ieșire
[[1 4] [2 5] [3 6]] Time taken 9813 ns  

Explicaţie: Mai întâi transformă matricea într-o listă de liste o aplatizează într-o singură listă folosind lanțul (*m), apoi reconstruiește matricea transpusă prin tăierea fiecărui element al n-a.

Articole înrudite:

  • Înțelegerea listei
  • Python IterOols
  • Python Zip
  • lanţ()
  • tupluri
  • Python Numpy