logo

Transsosujte matici v jednom řádku v Pythonu

Transponování matice v Pythonu znamená, že ji převrátí přes diagonální přeměnu všech řádků na sloupy a všechny sloupce na řádky. Pro zkoušku E a matice jako [[1 2] [3 4] [5 6]], která má 3 řádky a 2 sloupce se stávají [[1 3 5] [2 4 6]], která má po transpozice 2 řádky a 3 sloupce. Pochopíme různým metodám, jak to efektivně udělat.

Pomocí porozumění seznamu

Porozumění seznamu se používá k iterování skrz každý prvek v matici. V daném příkladu iterujeme každým prvkem matice (m) způsobem a přiřadíme výsledek matici Rez, což je transpozice m.



jak zjistím velikost monitoru
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) 

Výstup
[1 3 5] [2 4 6] 

Vysvětlení: Tento výraz vytváří novou matici tím, že vezme každý sloupec z originálu jako řádek v novém. Vyměňuje řádky se sloupci.

V zpívat zip

Python Zip vrací iterátor n-tisíc, kde i -th-the n-tice obsahuje prvek I -th z každé z argumentových sekvencí nebo iterables. V tomto příkladu rozbalíme naše pole pomocí * a poté zip, abychom získali transpozice.

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) 

Výstup
(1 4 7 10) (2 5 8 11) (3 6 9 12) 

Vysvětlení: Tento kód převádí matici m Použití zip (*m) . * Rozbalí řádky a zip () Skupiny prvky sloupce. Každá výstupní n -tice představuje sloupec z původní matice účinně vyměňující řady a sloupce.



Pomocí numpy

Python Numpy je obecně-účetní balíček pro zpracování pole navržený tak, aby efektivně manipuloval s velkými vícerozměrnými polemi.

Příklad 1: Metoda transpozice vrací transponovaný pohled na předanou vícerozměrnou matici.

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

Výstup
[[1 4] [2 5] [3 6]] 

Vysvětlení: numpy.transosport () Vyměňte řádky a sloupce matice m. Převádí původní matici 2 řádků a 3 sloupců na jednu se 3 řádky a 2 sloupce, která ji účinně transponovala.



Příklad 2: Používání '.t' po proměnné

pokud rudyardem kipling řádek po řádku vysvětlení
Python
import numpy as np m = np.array([[1 2 3] [4 5 6]]) print(m.T) 

Výstup
[[1 4] [2 5] [3 6]] 

Vysvětlení: Tento kód používá Numpy k vytvoření 2D pole M a poté vytiskne svůj transpozi .T . The .T Atribut Swaps řády a sloupce převádějící původní matici 2x3 na matici 3x2.

Pomocí itertools

Python Itertools je modul, který poskytuje různé funkce, které pracují na iterátorech na výrobu složitých iterátorů. Chain () je funkce, která bere řadu iterables a vrací jeden 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') 

Výstup
[[1 4] [2 5] [3 6]] Time taken 9813 ns 

Vysvětlení: Nejprve převede matici do seznamu seznamů, které ji zplošťuje do jediného seznamu pomocí řetězce (*m), poté přestaví transponovanou matici nařezáváním každého n-terénního prvku.

Související články:

  • Seznam porozumění
  • Python itertools
  • Python Zip
  • řetěz()
  • n -tice
  • Python Numpy