Koja je razlika između polja i matrica?
Neki ljudi traže matrična rješenja problema niza, pa u čemu je razlika? Velika je razlika u tome što su vrijednosti matrice brojevi, niz može sadržavati druge podatke, čak i nizove. Matrice mogu predstavljati jednadžbe, ovdje ih trebaju većini programera, barem u slučaju zamjene NumPy-a.
Kako se vrši izračun matrice?
Standardne operacije matrice jednostavno je izvesti, kada dodajete samo dodajete elemente, pri množenju možete koristiti skalar za svaki element i tako dalje.
Množenje je malo složenije, ali vrlo malo. Ono što ga čini teškim je to što trebate napraviti mnogo izračuna za svako rješenje, tu nastupaju performanse. Budući da većina izračuna ne ovisi jedni o drugima, ti su izračuni izvrsni kandidati za paralelno računanje. GPU-ovi su dizajnirani za ove vrste izračuna i dizajnirani su za jednostavno dodavanje u stolne sustave.
Kada trebate napraviti matrične izračune u Pythonu, prvo rješenje koje pronađete je numPy. Međutim, NumPy nije uvijek najučinkovitiji sustav za izračunavanje mnogih matrica.
Ovaj će post obuhvatiti mogućnosti koje imate u Pythonu.
Kad su vam potrebne alternative, počnite pažljivije gledajući za što su vam potrebne matrične operacije. Vaša trenutna instalacija možda već ima vlastitu implementaciju ili koristi temeljnu knjižnicu. Primjer je Strojno učenje, gdje je potreba za matričnim operacijama najvažnija. TensorFlow ima vlastitu knjižnicu za matrične operacije. Svakako znajte svoju trenutnu biblioteku.
U mnogim slučajevima ipak trebate rješenje koje odgovara vama. Možda u NumPy-u postoje ograničenja, neke su knjižnice brže od NumPy-a i posebno su napravljene za matrice. Mnogo puta programeri žele ubrzati svoj kod pa počnu tražiti alternative. Jedan od razloga je taj što NumPy ne može raditi na GPU-ima.
Iako je ovaj post o alternativama NumPyu, knjižnici izgrađenoj na vrhu NumPyja, treba spomenuti Theano knjižnicu. Theano biblioteka usko je integrirana s NumPy-om i omogućuje GPU podržane matrice. Theano je veća knjižnica za strojno učenje, ali možete izdvojiti samo funkcije matrice.
Za dublje objašnjenje korištenja Theano-a, pogledajte ovu stranicu: http: // www.marekrei.com / blog / theano-tutorial /
SpPy je knjižnica posebno za rijetke nizove, i dalje se može koristiti za matrice. Rijetki niz je, inače, niz koji u sebi ima mnogo nula vrijednosti. Ova je knjižnica mala i učinkovita, ali malo je ograničena zbog svoje specijalizacije. Također koristi NumPy, ali je učinkovitiji nego samo NumPy.
https: // pythonhosted.organizacija / špijun /
Eigen je učinkovita implementacija matrica, da biste ga koristili u Pythonu potreban vam je miniEigen, dostupan na https: // pypi.org / pypi / minieigen. Eigen je zapravo uključen u mnoga druga rješenja. Djeluje kao biblioteka generičke matrice za više specijalizirane module i okvire. Ova knjižnica ima mnogo modula za manipulaciju gustom matricom i nizom. Također podržava linearnu algebru, razgradnju i rijetku linearnu algebru. Paket također ima funkciju dodatka tako da možete dodati vlastite module.
Da biste koristili Eigen, instalirajte ga s pipom i uvezite u svoj kod.
PyTorch je knjižnica za strojno učenje, zbog čega ima matrične operacije. Uvoz cijele knjižnice pretjeran je ako želite napraviti samo nekoliko izračuna. Međutim, ako tek započinjete s projektom strojnog učenja, odlučite je li ovaj za vas.
Druga alternativa je dohvatiti bilo koju C-knjižnicu i koristiti je. Da bi to bilo moguće, postoji rješenje nazvano cffi koje će stvoriti sučelje za vas. Ovo rješenje zahtijeva da već znate C i da stvorite omot za svaku funkciju koja vam treba. Tada će kod izgledati zbrkan i teško ga je pročitati, ali ovo se možda isplati, ovisno o vašem projektu.
Ako samo želite ubrzati sve nizove i numeričke funkcije, umjesto toga možete koristiti numbu. Numba je Python kompajler. Kad ga upotrijebite, kompajler će stvoriti binarni kod 'točno u vrijeme', jit. Ideja jita češće se koristi s Javom, ali je vrlo korisna za tešku matematiku u Pythonu. Budući da se Python tumači, probleme s izvedbom možete dobiti s teškom matematikom, numba se brine o tome kompajliranjem na CPU ili GPU po vašem izboru.
Dostupne su i značajke paralelnog računanja, prema zadanim postavkama kompajler radi s bravom koja zaustavlja pokretanje mnogih niti istovremeno. To možete isključiti zastavicom sve dok ste svjesni potencijalnih problema povezanih s paralelnim programiranjem.
Zaključak
Mnogo puta kad započnete programirati na Pythonu ili drugim jezicima, naiđete na ograničenja jezika, kompajlera ili nečeg drugog. Kada ste u ovoj situaciji, trebali biste se zaustaviti i razmisliti koja ograničenja imate i razmotriti koliko je drugih moglo imati istu situaciju. U slučaju Pythona i NumPyja, mnogi su znanstvenici i programeri napisali kod koji treba brzo izvršiti. Ovo naslijeđe stvorilo je velik broj grana koje mogu riješiti vaš problem bez prisile da prebacite jezik ili napišete novo proširenje na taj jezik.