Transponere en matrix i en enkelt linje i Python

Transponering af en matrix i Python betyder at vende den over dens diagonale omdannelse af alle rækker til kolonner og alle søjler til rækker. Til eksempler e en matrix som [[1 2] [3 4] [5 6]], der har 3 rækker og 2 kolonner bliver [[1 3 5] [2 4 6]], som har 2 rækker og 3 kolonner efter transponering. Lad os forstå forskellige metoder til at gøre dette effektivt.

Ved hjælp af listeforståelse

Listeforståelse bruges til at iterere gennem hvert element i matrixen. I det givne eksempel itererer vi gennem hvert element af matrix (M) på en søjle-major måde og tildeler resultatet til Rez-matrixen, som er transponeringen af ​​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  )   

Produktion
[1 3 5] [2 4 6]  

Forklaring: Dette udtryk skaber en ny matrix ved at tage hver kolonne fra originalen som en række i det nye. Det bytter rækker med kolonner.

I syng lynlås

Python ZIP returnerer en iterator af tuples, hvor den i-tuple indeholder det i-th-element fra hvert af argumentsekvenserne eller iterables. I dette eksempel udpeger vi vores matrix ved hjælp af * og derefter lynlåser det for at få transponeringen.

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  )   

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

Forklaring: Denne kode transponerer matrixen m Brug af Zip (*m) . * Pakker rækkerne ud og zip () Grupper elementer kolonnevis. Hver output tuple repræsenterer en kolonne fra den originale matrix, der effektivt bytter rækker og kolonner.

Brug af numpy

Python Numpy er en generel array-behandlingspakke designet til effektivt at manipulere store multidimensionelle arrays.

Eksempel 1: Transponeringsmetoden returnerer et transponeret overblik over den passerede multidimensionelle matrix.

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

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

Forklaring: numpy.transpose () Swap rækker og kolonner i matrixen m. Det konverterer den originale matrix på 2 rækker og 3 kolonner til en med 3 rækker og 2 kolonner, der effektivt transponerer den.

Eksempel 2: Ved hjælp af '.t' efter variablen

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

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

Forklaring: Denne kode bruger numpy til at oprette en 2D -matrix m og udskriver derefter sin transponering ved hjælp af .T . De .T Attribut bytter rækker og kolonner, der konverterer den originale 2x3 -matrix til en 3x2 transponeret matrix.

Brug af itertools

Python itertools er et modul, der leverer forskellige funktioner, der fungerer på iteratorer til at producere komplekse iteratorer. Kæde () er en funktion, der tager en række iterables og returnerer en iterable.

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

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

Forklaring: Den konverterer først matrixen til en liste over lister flater den til en enkelt liste ved hjælp af kæde (*M) genopbygger derefter den transponerede matrix ved at skære hvert N-th-element.

Relaterede artikler:

  • Listeforståelse
  • Python itertools
  • Python Zip
  • kæde()
  • tuples
  • Python Numpy