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 monitoruPython
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.
Pythonm = [(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.
Pythonimport 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.
Pythonfrom 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