Datalogi

Sådan beregnes matricer i Python uden NumPy

Sådan beregnes matricer i Python uden NumPy
Til mange applikationer har du brug for matematik. I Python er der matematikmodulet, der håndterer det grundlæggende som afrunding, faktor og afrundingsfunktioner. Det inkluderer også Power & logaritmisk, trigonometri, vinkel og hyperbolske funktioner. For komplekse tal er modulet cmath. Disse håndterer dog ikke matrixoperationer.

Hvad er forskellen mellem arrays og matricer?

Nogle mennesker leder efter matrixløsninger til matrixproblemer, så hvad er forskellen?  Den store forskel er, at matrixværdier er tal, en matrix kan indeholde anden information, endda strenge.  Matricer kan repræsentere ligninger, det er her de fleste udviklere har brug for dem, i det mindste i tilfælde af udskiftning af NumPy.

Hvordan laver man en matrixberegning?

Standardmatrixhandlingerne er enkle at lave, når du tilføjer tilføjer du bare elementerne, når du multiplicerer, kan du bruge en skalar til hvert element og så videre.

Multiplikation er lidt mere kompleks, men meget lidt. Hvad der gør det tungt er, at du skal lave mange beregninger for hver løsning, det er her ydeevnen kommer ind. Da størstedelen af ​​beregningerne ikke er afhængige af hinanden, er disse beregninger fremragende kandidater til parallel beregning. GPU'er er designet til denne slags beregninger, og de er designet til nemt at blive tilføjet til desktop-systemer.

Når du har brug for at foretage matrixberegninger i Python, er den første løsning, du finder, numPy.  NumPy er dog ikke altid det mest effektive system til beregning af mange matricer.
Dette indlæg dækker hvilke muligheder du har i Python.

Når du har brug for alternativer, skal du starte med at se mere nøje på, hvad du har brug for matrixoperationer til. Din nuværende installation har muligvis allerede, enten deres egen implementering, eller bruger et underliggende bibliotek. Et eksempel er maskinindlæring, hvor behovet for matrixoperationer er altafgørende. TensorFlow har sit eget bibliotek til matrixoperationer. Sørg for, at du kender dit nuværende bibliotek.

I mange tilfælde har du dog brug for en løsning, der fungerer for dig. Måske er der begrænsninger i NumPy, nogle biblioteker er hurtigere end NumPy og specielt lavet til matricer. Mange gange ønsker udviklere at fremskynde deres kode, så de begynder at lede efter alternativer. En af grundene er, at NumPy ikke kan køre på GPU'er.

Mens dette indlæg handler om alternativer til NumPy, et bibliotek bygget oven på NumPy, skal Theano-biblioteket nævnes. Theano-biblioteket er tæt integreret med NumPy og muliggør GPU-understøttet matrix. Theano er et større bibliotek til maskinindlæring, men du kan kun løfte matrixfunktionerne ud.

For en dybere forklaring på brugen af ​​Theano, se denne side: http: // www.marekrei.com / blog / theano-tutorial /

SpPy er et bibliotek specielt til sparsomme arrays, det kan stadig bruges til matricer. Et sparsomt array er forresten et array, der har mange nulværdier i sig. Dette bibliotek er lille og effektivt, men lidt begrænset på grund af dets specialisering. Det bruger også NumPy, men er mere effektivt end bare NumPy.
https: // pythonhosted.org / sppy /

Eigen er en effektiv implementering af matricer, for at bruge den i Python har du brug for miniEigen, tilgængelig på https: // pypi.org / pypi / minieigen. Eigen er faktisk inkluderet i mange andre løsninger. Det fungerer som det generiske matrixbibliotek for mere specialiserede moduler og rammer. Dette bibliotek har mange moduler til tæt matrix og array manipulation. Det understøtter også lineær algebra, nedbrydning og sparsom lineær algebra. Pakken har også en plugin-funktion, så du kan tilføje dine egne moduler.
For at bruge Eigen skal du installere den med pip og importere den i din kode.

PyTorch er et bibliotek til maskinindlæring, og derfor har det matrixoperationer. Import af hele biblioteket er overkill, hvis du kun vil foretage et par beregninger. Men hvis du lige er begyndt med et maskinlæringsprojekt, skal du sørge for at beslutte, om denne er noget for dig.
Et andet alternativ er at hente ethvert C-bibliotek og bruge det. For at gøre dette muligt er der en løsning ved navn cffi, der opretter grænsefladen til dig. Denne løsning kræver, at du allerede kender C, og at du opretter en indpakning til hver funktion, du har brug for. Koden vil derefter se forvirret og svær at læse, men det kan være det værd, afhængigt af dit projekt.

Hvis du bare vil fremskynde alle array- og numeriske funktioner, kan du bruge numba i stedet. Numba er en Python-kompilator. Når du bruger det, opretter kompilatoren binær kode 'just in time', jit. Idéen om jit bruges mere almindeligt med Java, men er meget nyttig til tung matematik i Python. Da Python fortolkes, kan du få problemer med ydeevne med tung matematik, numba tager sig af dette ved at kompilere til CPU eller GPU efter eget valg.
Der er også parallelle beregningsfunktioner til rådighed, som standard kører compileren med en lås, der forhindrer mange tråde i at køre på samme tid. Du kan slå dette fra med et flag, så længe du er opmærksom på de potentielle problemer, der er forbundet med parallel programmering.

Konklusion

Mange gange når du begynder at programmere i Python eller andre sprog, løber du ind i begrænsningerne for sproget, compileren eller noget andet. Når du er i denne situation, skal du stoppe op og tænke over, hvilken begrænsning du har og overveje, hvor mange andre der måske har haft den samme situation. I tilfældet med Python og NumPy har mange forskere og udviklere skrevet kode, der kræver hurtig udførelse. Denne arv har skabt et stort antal grene, der kan løse dit problem uden at tvinge dig til at skifte sprog eller skrive en ny udvidelse til dette særlige sprog.

Sådan udvikler du et spil på Linux
For et årti siden ville ikke mange Linux-brugere forudsige, at deres foretrukne operativsystem en dag ville være en populær spilplatform til kommercie...
Open Source-porte med kommercielle spilmotorer
Gratis, open source og cross-platform spilmotorgendringer kan bruges til at spille gamle såvel som nogle af de temmelig nylige spiltitler. Denne artik...
Bedste kommandoliniespil til Linux
Kommandolinjen er ikke kun din største allierede, når du bruger Linux, den kan også være kilde til underholdning, fordi du kan bruge den til at spille...