Trasporre una matrice in riga singola in Python

Trasporre una matrice in Python significa capovolgerla sulla sua diagonale trasformando tutte le righe in colonne e tutte le colonne in righe. Per es e una matrice come [[1 2] [3 4] [5 6]] che ha 3 righe e 2 colonne diventa [[1 3 5] [2 4 6]] che ha 2 righe e 3 colonne dopo la trasposizione. Comprendiamo diversi metodi per farlo in modo efficiente.

Utilizzo della comprensione delle liste

La comprensione delle liste viene utilizzata per scorrere ciascun elemento della matrice. Nell'esempio fornito iteriamo attraverso ciascun elemento della matrice (m) in modo colonna maggiore e assegniamo il risultato alla matrice rez che è la trasposizione di 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  )   

Produzione
[1 3 5] [2 4 6]  

Spiegazione: Questa espressione crea una nuova matrice prendendo ogni colonna dell'originale come una riga in quella nuova. Scambia le righe con le colonne.

IN canta zip

Python Zip restituisce un iteratore di tuple in cui la tupla i-esima contiene l'elemento i-esimo da ciascuna delle sequenze di argomenti o iterabili. In questo esempio decomprimiamo il nostro array usando * e poi lo comprimiamo per ottenere la trasposizione.

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  )   

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

Spiegazione: Questo codice traspone la matrice M utilizzando codice postale(*m) . Il * decomprime le righe e zip() raggruppa gli elementi in base alla colonna. Ogni tupla di output rappresenta una colonna della matrice originale scambiando effettivamente righe e colonne.

Utilizzando NumPy

Python NumPy è un pacchetto di elaborazione di array per scopi generici progettato per manipolare in modo efficiente array multidimensionali di grandi dimensioni.

Esempio 1: Il metodo transpose restituisce una vista trasposta della matrice multidimensionale passata.

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

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

Spiegazione: numpy.transpose() scambiare righe e colonne della matrice m. Converte la matrice originale di 2 righe e 3 colonne in una con 3 righe e 2 colonne che la traspongono efficacemente.

Esempio 2: Utilizzando '.T' dopo la variabile

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

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

Spiegazione: Questo codice utilizza NumPy per creare un array 2D m quindi stampa la sua trasposizione utilizzando .T . IL .T l'attributo scambia righe e colonne convertendo la matrice 2x3 originale in una matrice trasposta 3x2.

Utilizzando Itertools

Python itertools è un modulo che fornisce varie funzioni che funzionano sugli iteratori per produrre iteratori complessi. chain() è una funzione che accetta una serie di iterabili e restituisce un iterabile.

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

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

Spiegazione: Innanzitutto converte la matrice in un elenco di elenchi e la appiattisce in un unico elenco utilizzando chain(*M), quindi ricostruisce la matrice trasposta suddividendo ogni n-esimo elemento.

Articoli correlati:

  • Comprensione degli elenchi
  • Itertools Python
  • Zip pitone
  • catena()
  • tuple
  • Python NumPy