logo

Transponeer een matrix in één regel in Python

Het transponeren van een matrix in Python betekent dat je hem over zijn diagonaal draait, waardoor alle rijen in kolommen en alle kolommen in rijen worden veranderd. Bijvoorbeeld e een matrix zoals [[1 2] [3 4] [5 6]] die 3 rijen en 2 kolommen heeft, wordt na transponeren [[1 3 5] [2 4 6]] die 2 rijen en 3 kolommen heeft. Laten we verschillende methoden begrijpen om dit efficiënt te doen.

Lijstbegrip gebruiken

Lijstbegrip wordt gebruikt om elk element in de matrix te doorlopen. In het gegeven voorbeeld doorlopen we elk element van matrix (m) op een kolomhoofdige manier en wijzen het resultaat toe aan de rez-matrix die de transpositie van m is.



wat is desktop.ini
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) 

Uitvoer
[1 3 5] [2 4 6] 

Uitleg: Deze uitdrukking creëert een nieuwe matrix door elke kolom uit het origineel als rij in de nieuwe te nemen. Het verwisselt rijen met kolommen.

IN Zing zip

Python Zip retourneert een iterator van tupels waarbij het i-de tupel het i-de element uit elk van de argumentreeksen of iterabelen bevat. In dit voorbeeld pakken we onze array uit met * en zippen we deze vervolgens om de transpositie te verkrijgen.

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) 

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

Uitleg: Deze code transponeert de matrix M gebruiken ritssluiting(*m) . De * pakt de rijen uit en zip() groepeert elementen kolomsgewijs. Elke uitvoertupel vertegenwoordigt een kolom uit de oorspronkelijke matrix, waarbij effectief rijen en kolommen worden verwisseld.



NumPy gebruiken

Python NumPy is een array-verwerkingspakket voor algemeen gebruik dat is ontworpen om grote multidimensionale arrays efficiënt te manipuleren.

Voorbeeld 1: De transponeermethode retourneert een getransponeerde weergave van de doorgegeven multidimensionale matrix.

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

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

Uitleg: numpy.transpose() verwissel rijen en kolommen van de matrix m. Het converteert de oorspronkelijke matrix van 2 rijen en 3 kolommen naar één met 3 rijen en 2 kolommen, waardoor deze effectief wordt getransformeerd.



Voorbeeld 2: Gebruik '.T' na de variabele

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

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

Uitleg: Deze code gebruikt NumPy om een ​​2D-array te maken en drukt vervolgens de transpositie af met behulp van .T . De .T attribuut verwisselt rijen en kolommen en converteert de originele 2x3 matrix naar een 3x2 getransponeerde matrix.

Itertools gebruiken

Python itertools is een module die verschillende functies biedt die op iterators werken om complexe iterators te produceren. chain() is een functie die een reeks iterabelen nodig heeft en één iterabel retourneert.

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

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

Uitleg: Het converteert de matrix eerst naar een lijst met lijsten, vlakt deze af tot een enkele lijst met behulp van chain(*M) en bouwt vervolgens de getransponeerde matrix opnieuw op door elk n-de element in plakjes te snijden.

YouTube downloaden met vlc

Gerelateerde artikelen:

  • Lijstbegrip
  • Python itertools
  • Python-ritssluiting
  • ketting()
  • tupels
  • Python NumPy