Data Science

Ako vypočítať matice v Pythone bez NumPy

Ako vypočítať matice v Pythone bez NumPy
Pre veľa aplikácií potrebujete matematiku. V Pythone je matematický modul, ktorý zvláda základné funkcie ako zaoblenie, faktoriál a funkcie zaokrúhľovania. Zahŕňa tiež Power & logaritmické, trigonometrické, uhlové a hyperbolické funkcie. Pre komplexné čísla je modul cmath. Tieto však nespracovávajú maticové operácie.

Aký je rozdiel medzi poliami a maticami?

Niektorí ľudia hľadajú maticové riešenia problémov s poliami, v čom je teda rozdiel?  Veľký rozdiel je v tom, že maticovými hodnotami sú čísla, pole môže obsahovať ďalšie informácie, dokonca aj reťazce.  Matice môžu predstavovať rovnice, to je miesto, kde ich väčšina vývojárov potrebuje, prinajmenšom v prípade výmeny NumPy.

Ako urobíte maticový výpočet?

Štandardné maticové operácie sa dajú ľahko urobiť, pri pridávaní stačí pridať prvky, pri vynásobení môžete ku každému prvku použiť skalár atď.

Násobenie je trochu zložitejšie, ale o veľmi málo. Ťažké je, že pre každé riešenie musíte urobiť veľa výpočtov, tu prichádza na rad výkon. Pretože väčšina výpočtov nezávisí od seba, sú tieto výpočty vynikajúcimi kandidátmi na paralelné výpočty. GPU sú určené pre tieto druhy výpočtov a sú navrhnuté tak, aby sa dali ľahko pridať do systémov pre stolné počítače.

Keď potrebujete urobiť maticové výpočty v Pythone, prvé nájdené riešenie je numPy.  NumPy však nie je vždy najefektívnejším systémom na výpočet mnohých matíc.
Tento príspevok sa bude venovať tomu, aké možnosti máte v Pythone.

Ak potrebujete alternatívy, začnite dôkladnejším prezeraním toho, na čo potrebujete maticové operácie. Vaša aktuálna inštalácia už môže mať vlastnú implementáciu alebo používa podkladovú knižnicu. Príkladom je Machine Learning, kde je prvoradá potreba maticových operácií. TensorFlow má vlastnú knižnicu pre operácie s maticami. Uistite sa, že poznáte svoju aktuálnu knižnicu.

V mnohých prípadoch však potrebujete riešenie, ktoré vám vyhovuje. Možno existujú obmedzenia v NumPy, niektoré knižnice sú rýchlejšie ako NumPy a sú špeciálne vyrobené pre matice. Vývojári chcú mnohokrát urýchliť svoj kód, aby začali hľadať alternatívy. Jedným z dôvodov je, že NumPy nemôže bežať na GPU.

Aj keď tento príspevok pojednáva o alternatívach k NumPy, knižnici postavenej na vrchole NumPy, je potrebné spomenúť Theano Library. Knižnica Theano je úzko integrovaná s NumPy a umožňuje maticu podporovanú GPU. Theano je väčšia knižnica pre strojové učenie, ale môžete zdvihnúť iba maticové funkcie.

Podrobnejšie vysvetlenie používania aplikácie Theano nájdete na tejto stránke: http: // www.marekrei.com / blog / theano-tutorial /

SpPy je knižnica špeciálne pre riedke polia, stále sa dá použiť pre matice. Riedke pole, mimochodom, je pole, ktoré má v sebe veľa nulových hodnôt. Táto knižnica je malá a efektívna, ale trochu obmedzená kvôli svojej špecializácii. Používa tiež program NumPy, ale je efektívnejší ako iba program NumPy.
https: // pythonhosted.org / sppy /

Eigen je efektívna implementácia matíc, na jeho použitie v Pythone potrebujete miniEigen, ktorý je k dispozícii na https: // pypi.org / pypi / minieigen. Vlastný tvar je vlastne zahrnutý v mnohých ďalších riešeniach. Funguje ako knižnica generickej matice pre špecializovanejšie moduly a rámce. Táto knižnica má veľa modulov na manipuláciu s hustou maticou a poľami. Podporuje tiež lineárnu algebru, rozklad a riedku lineárnu algebru. Balík má aj funkciu doplnku, aby ste mohli pridávať svoje vlastné moduly.
Ak chcete použiť Eigen, nainštalujte ho pomocou pipu a importujte ho do svojho kódu.

PyTorch je knižnica pre strojové učenie, preto má maticové operácie. Importovanie celej knižnice je prehnané, ak chcete vykonať iba niekoľko výpočtov. Ak však práve začínate s projektom strojového učenia, určite sa rozhodnite, či je tento pre vás.
Ďalšou alternatívou je načítanie ľubovoľnej C-knižnice a jej použitie. Aby to bolo možné, existuje riešenie s názvom cffi, ktoré za vás vytvorí rozhranie. Toto riešenie vyžaduje, aby ste už vedeli C a aby ste vytvorili obal pre každú funkciu, ktorú potrebujete. Kód potom bude vyzerať zmätený a ťažko čitateľný, ale to môže stáť za to, v závislosti od vášho projektu.

Ak chcete iba urýchliť všetky pole a numerické funkcie, môžete namiesto toho použiť numba. Numba je kompilátor jazyka Python. Keď ho použijete, kompilátor vytvorí binárny kód „just in time“, jit. Myšlienka jit sa častejšie používa v prostredí Java, ale je veľmi užitočná pre ťažkú ​​matematiku v Pythone. Pretože je Python interpretovaný, s ťažkou matematikou môžete mať problémy s výkonom, numba sa o to postará kompiláciou s CPU alebo GPU podľa vášho výberu.
K dispozícii sú tiež funkcie paralelného výpočtu, v predvolenom nastavení pracuje kompilátor so zámkom, ktorý zabráni spusteniu viacerých vlákien súčasne. Toto môžete vypnúť príznakom, pokiaľ si uvedomujete potenciálne problémy spojené s paralelným programovaním.

Záver

Mnohokrát, keď začnete programovať v Pythone alebo iných jazykoch, narazíte na obmedzenia jazyka, kompilátora alebo niečoho iného. Keď ste v tejto situácii, mali by ste sa zastaviť a zamyslieť sa nad tým, aké máte obmedzenia, a zvážiť, koľko ďalších mohlo mať rovnakú situáciu. V prípade Pythonu a NumPy napísalo veľa vedcov a vývojárov kód, ktorý vyžaduje rýchle vykonanie. Toto dedičstvo vytvorilo veľké množstvo pobočiek, ktoré môžu vyriešiť váš problém bez toho, aby vás nútili prepínať jazyk alebo písať nové prípony do tohto konkrétneho jazyka.

Hry Ako zvýšiť rýchlosť FPS v systéme Linux?
Ako zvýšiť rýchlosť FPS v systéme Linux?
FPS znamená Počet snímok za sekundu. Úlohou FPS je merať snímkovú frekvenciu pri prehrávaní videa alebo herných výkonoch. Jednoducho povedané, počet n...
Hry Najlepšie hry Oculus App Lab
Najlepšie hry Oculus App Lab
Ak ste vlastníkom náhlavnej súpravy Oculus, musíte byť informovaní o bočnom nakladaní. Sideloading je proces inštalácie neuloženého obsahu do náhlavne...
Hry Top 10 hier, ktoré sa dajú hrať na Ubuntu
Top 10 hier, ktoré sa dajú hrať na Ubuntu
Platforma Windows je jednou z dominujúcich platforiem pre hry kvôli obrovskému percentu hier, ktoré sa dnes vyvíjajú na natívnu podporu systému Window...