logo

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.



quale anno è stato inventato il computer
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.

guasto generale di protezione

Articoli correlati:

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