Articles

Python: Vektory, Matice a Pole s NumPy

V této lekci, budeme podívejte se na některé dobré tipy a triky, jak hrát s vektory, maticemi a polí pomocí NumPy knihovna v Pythonu. Tato lekce je velmi dobrým výchozím bodem, pokud začínáte s datovou vědou a potřebujete nějaký úvodní matematický přehled těchto komponent a jak s nimi můžeme hrát Pomocí NumPy v kódu.

Knihovna NumPy nám umožňuje provádět různé operace, které je třeba provést na datových strukturách často používaných ve strojovém učení a datové vědě, jako jsou vektory, matice a pole. Ukážeme pouze nejběžnější operace s NumPy, které se používají v mnoha potrubích strojového učení. Nakonec si prosím všimněte, že NumPy je jen způsob, jak provádět operace, takže matematické operace, které ukazujeme, jsou hlavním zaměřením této lekce a ne samotný balíček NumPy. Tak začneme.

co je vektor?

podle Google je vektor veličina mající směr i velikost, zejména jako určení polohy jednoho bodu v prostoru vzhledem k druhému.

vektory jsou ve strojovém učení velmi důležité, protože nejen popisují velikost, ale také směr vlastností. Můžeme vytvořit vektor v NumPy s následujícím úryvkem kódu:

import numpy jako np
row_vector = np.array ()
print (row_vector)

ve výše uvedeném úryvku kódu jsme vytvořili řádkový vektor. Můžeme také vytvořit sloupcový vektor jako:

import numpy jako np
col_vector = np.array(,,])
print (col_vector)

vytvoření matice

matici lze jednoduše chápat jako dvourozměrné pole. Můžeme vytvořit matici s NumPy vytvořením vícerozměrného pole:

matrix = np.array (,,])
print (matrix)

přestože je matice přesně podobná vícerozměrnému poli, maticová datová struktura se nedoporučuje ze dvou důvodů:

  1. pole je standard, když přijde na NumPy balíčku
  2. Většina operací s NumPy vrací pole a ne matrix

Použití Řídké Matice

připomínat, řídké matice je ten, ve kterém většina položek jsou nulové. Nyní je běžným scénářem zpracování dat a strojového učení zpracování matic, ve kterých je většina prvků nulová. Zvažte například matici, jejíž řádky popisují každé video na Youtube a sloupce představují každého registrovaného uživatele. Každá hodnota představuje, zda uživatel sledoval video nebo ne. Většina hodnot v této matici bude samozřejmě nulová. Výhodou řídké matice je, že neukládá hodnoty, které jsou nulové. To má za následek obrovskou výpočetní výhodu a optimalizaci úložiště.

Pojďme vytvořit jiskru matice zde:

pochopit, jak kód funguje, podíváme se na výstupu:

Ve výše uvedeném kódu, použili jsme NumPy je funkce pro vytvoření Komprimované řídké řádek matice, kde nenulové prvky jsou reprezentovány pomocí zero-based indexy. Existují různé druhy řídké matice, jako:

  • Komprimované řídké sloupce
  • seznamy
  • Slovník klíčů

nechceme být potápění do jiné řídké matice zde, ale vím, že každý je jejich použití je specifické a nikdo nemůže být nazývána jako „nejlepší“.

použití operací na všechny vektorové prvky

je to běžný scénář, kdy potřebujeme použít společnou operaci na více vektorových prvků. To lze provést definováním lambda a následnou vektorizací. Podívejme se na nějaký úryvek kódu pro stejný:

matrix = np.pole (,
,
])
mul_5 = lambda x: x * 5
vectorized_mul_5 = np.vectorize(mul_5)
vectorized_mul_5(matrix)

pochopit, jak kód funguje, podíváme se na výstupu:

Ve výše uvedeném fragmentu kódu jsme použili vectorize funkce, která je součástí knihovna NumPy, transformovat jednoduchý lambda definice do funkce, ve které můžete proces každý a každý prvek vektoru. Je důležité si uvědomit, že vectorize je pouze smyčka nad prvky a nemá žádný vliv na výkon programu. NumPy také umožňuje vysílání, což znamená, že místo výše uvedené složitý kód, jsme mohli jednoduše udělat:

matrix * 5

A výsledek by byl úplně stejný. Chtěl jsem nejprve ukázat složitou část, jinak byste sekci přeskočili!

průměr, rozptyl a směrodatná odchylka

s NumPy je snadné provádět operace související s popisnou statistikou vektorů. Průměr vektoru lze vypočítat jako:

np.průměr (matice)

rozptyl vektoru lze vypočítat jako:

np.var (matrix)

směrodatnou odchylku vektoru lze vypočítat jako:

np.std(matrix)

výstup z výše uvedených příkazů na dané matice je uveden zde:

Provedení Matrix

Provedení je velmi časté operace, které bude slyšet vždy, když jste obklopeni matice. Transpozice je jen způsob, jak vyměnit sloupcové a řádkové hodnoty matice. Vezměte prosím na vědomí, že vektor nelze transponovat, protože vektor je pouze sbírka hodnot, aniž by tyto hodnoty byly kategorizovány do řádků a sloupců. Vezměte prosím na vědomí, že převod řadě vektor sloupcový vektor není provedení (na základě definice z lineární algebry, což je mimo rozsah této lekce).

prozatím najdeme mír pouhým transponováním matice. Je velmi jednoduché přistupovat k transpozici matice s NumPy:

matrix.T

výstup výše uvedeného příkazu na dané matici je uveden zde:

stejnou operaci lze provést na řádkovém vektoru a převést jej na sloupcový vektor.

zploštění matice

můžeme převést matici na jednorozměrné pole, pokud chceme zpracovávat její prvky lineárním způsobem. To lze provést pomocí následujícího úryvku kódu:

matice.flatten()

výstup z příkazu výše na dané matice je uveden zde:

Všimněte si, že vyrovnat matrix je jednorozměrné pole, jednoduše lineární v módě.

výpočet vlastních čísel a vlastních vektorů

vlastní vektory se velmi často používají v balíčcích strojového učení. Když je tedy lineární transformační funkce prezentována jako matice, pak X, vlastní vektory jsou vektory, které se mění pouze v měřítku vektoru, ale ne jeho směru. Můžeme říci, že:

Xv = yv

Tady, X je čtvercová matice a γ obsahuje vlastní čísla. Také v obsahuje vlastní vektory. S NumPy je snadné vypočítat vlastní čísla a vlastní vektory. Zde je úryvek kódu, kde prokazujeme totéž:

evalues, evectors = np.linalgu.eig(matrix)

výstup z příkazu výše na dané matice je uveden zde:

Dot Výrobky z Vektorů

Dot Výrobky z Vektorů je způsob, součin 2 vektorů. Říká vám, kolik vektorů je ve stejném směru, na rozdíl od křížového součinu, který vám říká opak, jak málo vektorů je ve stejném směru (nazývaném ortogonální). Můžeme vypočítat bodový součin dvou vektorů, jak je uvedeno v úryvku kódu zde:

a = np.array ()
b = np.array ()
np.dot(a, b)

výstup z příkazu výše na dané pole je uveden zde:

sčítání, Odčítání a Násobení Matic

Přidáním a Odečtením více matic je poměrně jednoduché operace v matricích. Existují dva způsoby, jak to lze provést. Podívejme se na úryvek kódu k provedení těchto operací. Abychom to udrželi jednoduché, použijeme stejnou matici dvakrát:

np.add (matrix, matrix)

dále lze odečíst dvě matice jako:

np.odečíst(matrix, matrix)

výstup z příkazu výše na dané matice je uveden zde:

Jak se očekávalo, každý z prvků v matrici je přičtena/odečtena s odpovídající prvek. Násobení matice je podobné nalezení Dot součinu jako dříve:

np.dot (matrix, matrix)

výše uvedený kód najde skutečnou multiplikační hodnotu dvou matic, daných jako:

matice *

výstup z příkazu výše na dané matice je uveden zde:

Závěr

V této lekci jsme šli přes mnoho matematické operace související s Vektory, Maticemi a Poli, které jsou běžně používané pro zpracování Dat, popisné statistiky a data science. To bylo rychlý lekci pokrývá pouze nejčastější a nejdůležitější částí širokou škálu koncepcí, ale tyto operace by měl dát velmi dobrou představu o tom, co všechny operace mohou být provedeny při jednání s těmito datovými strukturami.

Prosím, podělte se o svůj názor Volně o lekci na Twitteru s @linuxhint a @sbmaggarwal (to jsem já!).