Data Science

Jak vypočítat matice v Pythonu bez NumPy

Jak vypočítat matice v Pythonu bez NumPy
Pro mnoho aplikací potřebujete matematiku. V Pythonu existuje matematický modul, který zpracovává základní funkce, jako jsou funkce zaokrouhlování, faktoriál a zaokrouhlování. Zahrnuje také Power & logaritmické, trigonometrické, úhlové a hyperbolické funkce. Pro komplexní čísla je modul cmath. Ty však nezpracovávají maticové operace.

Jaký je rozdíl mezi poli a maticemi?

Někteří lidé hledají maticová řešení problémů s poli, v čem je tedy rozdíl?  Velkým rozdílem je, že maticové hodnoty jsou čísla, pole může obsahovat další informace, dokonce i řetězce.  Matice mohou představovat rovnice, to je místo, kde je většina vývojářů potřebuje, alespoň v případě nahrazení NumPy.

Jak provedete maticový výpočet?

Standardní operace s maticemi se dají snadno udělat, při přidávání stačí přidat prvky, při násobení můžete ke každému prvku použít skalár atd.

Násobení je trochu složitější, ale jen velmi málo. Ztěžuje to, že musíte udělat mnoho výpočtů pro každé řešení, to je místo, kde přichází výkon. Protože většina výpočtů na sobě nezávisí, jsou tyto výpočty vynikajícími kandidáty pro paralelní výpočet. GPU jsou navrženy pro tyto druhy výpočtů a jsou navrženy pro snadné přidání do desktopových systémů.

Když potřebujete provést maticové výpočty v Pythonu, první řešení, které najdete, je numPy.  NumPy však není vždy nejúčinnějším systémem pro výpočet mnoha matic.
Tento příspěvek se bude zabývat tím, jaké možnosti máte v Pythonu.

Pokud potřebujete alternativy, začněte pečlivějším hledáním toho, pro co potřebujete maticové operace. Vaše aktuální instalace již může mít buď vlastní implementaci, nebo používá podkladovou knihovnu. Příkladem je Machine Learning, kde je prvořadá potřeba maticových operací. TensorFlow má vlastní knihovnu pro maticové operace. Ujistěte se, že znáte svou aktuální knihovnu.

V mnoha případech však potřebujete řešení, které vám vyhovuje. Možná existují omezení v NumPy, některé knihovny jsou rychlejší než NumPy a jsou speciálně vytvořeny pro matice. Mnohokrát chtějí vývojáři urychlit svůj kód, aby začali hledat alternativy. Jedním z důvodů je, že NumPy nemůže běžet na GPU.

I když je tento příspěvek o alternativách k NumPy, knihovně postavené na vrcholu NumPy, je třeba zmínit Theano Library. Knihovna Theano je úzce integrována s NumPy a umožňuje matici podporovanou GPU. Theano je větší knihovna pro strojové učení, ale můžete zvednout pouze maticové funkce.

Podrobnější vysvětlení použití Theano najdete na této stránce: http: // www.marekrei.com / blog / theano-tutorial /

SpPy je knihovna speciálně pro řídká pole, stále ji lze použít pro matice. Řídké pole, mimochodem, je pole, které má v sobě mnoho nulových hodnot. Tato knihovna je malá a efektivní, ale díky své specializaci trochu omezená. Používá také NumPy, ale je efektivnější než jen NumPy.
https: // pythonhosted.org / sppy /

Eigen je efektivní implementace matic, pro jeho použití v Pythonu potřebujete miniEigen, dostupný na https: // pypi.org / pypi / minieigen. Vlastní je vlastně součástí mnoha dalších řešení. Funguje jako knihovna generických matic pro specializovanější moduly a rámce. Tato knihovna má mnoho modulů pro manipulaci s hustou maticí a maticemi. Podporuje také lineární algebru, rozklad a řídkou lineární algebru. Balíček má také funkci pluginu, takže můžete přidat své vlastní moduly.
Chcete-li použít Eigen, nainstalujte jej pomocí pipu a importujte jej do svého kódu.

PyTorch je knihovna pro strojové učení, protože má maticové operace. Import celé knihovny je přehnaný, pokud chcete provést jen několik výpočtů. Pokud však právě začínáte s projektem strojového učení, rozhodněte se, zda je tento pro vás.
Další alternativou je načíst libovolnou C-knihovnu a použít ji. Aby to bylo možné, existuje řešení s názvem cffi, které pro vás vytvoří rozhraní. Toto řešení vyžaduje, abyste již věděli C a abyste vytvořili obal pro každou funkci, kterou potřebujete. Kód pak bude vypadat zmateně a těžko čitelný, ale v závislosti na vašem projektu to může stát za to.

Pokud chcete jen urychlit všechny matice a numerické funkce, můžete místo toho použít numbu. Numba je překladač Pythonu. Když jej použijete, kompilátor vytvoří binární kód „just in time“, jit. Myšlenka jit se běžněji používá v Javě, ale je velmi užitečná pro těžkou matematiku v Pythonu. Vzhledem k tomu, že je Python interpretován, můžete s těžkou matematikou získat problémy s výkonem, numba se o to postará kompilací na CPU nebo GPU podle vašeho výběru.
K dispozici jsou také funkce paralelního výpočtu, ve výchozím nastavení kompilátor běží se zámkem, který zastaví běh mnoha vláken současně. Toto můžete vypnout příznakem, pokud víte o potenciálních problémech spojených s paralelním programováním.

Závěr

Mnohokrát, když začnete programovat v Pythonu nebo jiných jazycích, narazíte na omezení jazyka, kompilátoru nebo něčeho jiného. Když jste v této situaci, měli byste se zastavit a přemýšlet o tom, jaké máte omezení, a zvážit, kolik dalších mohlo mít stejnou situaci. V případě Pythonu a NumPy mnoho vědců a vývojářů napsalo kód, který vyžaduje rychlé provedení. Toto dědictví vytvořilo velké množství větví, které mohou vyřešit váš problém, aniž by vás musely přepínat jazyk nebo psát nové rozšíření do tohoto konkrétního jazyka.

Hry Nejlepší hry Oculus App Lab
Nejlepší hry Oculus App Lab
Pokud jste vlastníkem náhlavní soupravy Oculus, musíte mít informace o bočním nakládání. Sideloading je proces instalace neukládaného obsahu do náhlav...
Hry Top 10 her k hraní na Ubuntu
Top 10 her k hraní na Ubuntu
Platforma Windows byla jednou z dominujících platforem pro hraní her kvůli velkému procentu her, které se dnes vyvíjejí, aby nativně podporovaly Windo...
Hry 5 nejlepších arkádových her pro Linux
5 nejlepších arkádových her pro Linux
V dnešní době jsou počítače vážné stroje používané k hraní her. Pokud nemůžete získat nové vysoké skóre, budete vědět, co tím myslím. V tomto příspěvk...