Siirrä matriisi yhdellä rivillä pythonissa

Matriisin siirtäminen Pythonissa tarkoittaa sen kääntämistä diagonaalin yli kääntämällä kaikki rivit pylväiksi ja kaikki sarakkeet riveiksi. Tentlspl E Matriisi, kuten [[1 2] [3 4] [5 6]], jossa on 3 riviä ja 2 saraketta, tulee [[1 3 5] [2 4 6]], joissa on 2 riviä ja 3 saraketta siirron jälkeen. Ymmärrämme erilaisia ​​menetelmiä tämän tehokkaasti.

Luettelon ymmärtämisen käyttäminen

Luettelon ymmärtämistä käytetään iterointiin jokaisen matriisin elementin läpi. Annetussa esimerkissä iteraimme matriisin (M) jokaisen elementin läpi pylväs-matalilla ja määritämme tuloksen REZ-matriisiin, joka on m: n siirto.

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  )   

Tulos
[1 3 5] [2 4 6]  

Selitys: Tämä lauseke luo uuden matriisin ottamalla jokainen sarake alkuperäisestä uudessa rivinnä. Se vaihtaa rivejä sarakkeilla.

Sisä- laulaa vetoketju

Python Zip palauttaa iteraattorin Tuples-laitteista, joissa I-tuuma sisältää I-TH: n elementin jokaisesta argumenttijaksosta tai iterablesista. Tässä esimerkissä irrotamme taulukon * ja vetoketjutamme sen saamiseksi.

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  )   

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

Selitys: Tämä koodi siirtää matriisin m käyttäminen vetoketju (*m) . * Purkaa rivit ja postinumero() Ryhmät elementit sarakkeessa. Jokainen lähtötuple edustaa alkuperäisen matriisin saraketta, joka vaihdetaan tehokkaasti rivejä ja sarakkeita.

Käyttämällä numphy

Python Numpy on yleiskäyttöinen taulukkojen käsittelypaketti, joka on suunniteltu manipuloimaan tehokkaasti suuria moniulotteisia taulukkoja.

Esimerkki 1: Transpose-menetelmä palauttaa siirretyn näkymän ohitettuun moniulotteiseen matriisiin.

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

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

Selitys: Numpy.Transpose () Vaihda matriisin m. Se muuntaa 2 rivin ja 3 sarakkeen alkuperäisen matriisin 3 rivillä ja 2 saraketta, jotka siirtävät sen tehokkaasti.

Esimerkki 2: Käyttämällä '.t' muuttujan jälkeen

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

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

Selitys: Tämä koodi käyttää numpyä luomaan 2D -taulukko M .T . Se .T Attribuutin vaihtosuorat rivit ja sarakkeet, jotka muuntavat alkuperäisen 2x3 -matriisin 3x2 -siirretyksi matriisiksi.

ITERTOOLS: n käyttäminen

Python Itertools on moduuli, joka tarjoaa erilaisia ​​toimintoja, jotka toimivat iteraattoreissa tuottaakseen monimutkaisia ​​iteraattoreita. Chain () on funktio, joka ottaa sarjan iterablia ja palauttaa yhden iteroitavan.

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

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

Selitys: Se muuntaa matriisin ensin luetteloluetteloon tasoittaa sen yhdeksi luetteloksi ketjun (*M) avulla, sitten rakentaa siirretty matriisi viipaloimalla jokainen N-TH-elementti.

Aiheeseen liittyvät artikkelit:

  • Luettelo
  • Python itertools
  • Python Zip
  • ketju()
  • tuplat
  • Python numphy