Datavitenskap

Hvordan beregne matriser i Python uten NumPy

Hvordan beregne matriser i Python uten NumPy
For mange applikasjoner trenger du matematikk. I Python er det matematikkmodulen som håndterer det grunnleggende som avrunding, faktor og avrundingsfunksjoner. Den inkluderer også kraft- og logaritmiske, trigonometri, vinkel- og hyperbolske funksjoner. For komplekse tall er modulen cmath. Disse håndterer imidlertid ikke matriseoperasjoner.

Hva er forskjellen mellom matriser og matriser?

Noen mennesker leter etter matriseløsninger for matrixproblemer, så hva er forskjellen?  Den store forskjellen er at matriseverdier er tall, en matrise kan inneholde annen informasjon, til og med strenger.  Matriser kan representere ligninger, det er her de fleste utviklere trenger dem, i det minste i tilfelle å erstatte NumPy.

Hvordan lager du en matriseberegning?

Standard matriseoperasjoner er enkle å lage, når du legger til legger du bare til elementene, når du multipliserer kan du bruke en skalar til hvert element og så videre.

Multiplikasjon er litt mer kompleks, men veldig lite. Det som gjør det tungt er at du trenger å gjøre mange beregninger for hver løsning, det er her ytelsen kommer inn. Siden flertallet av beregningene ikke er avhengig av hverandre, er disse beregningene gode kandidater for parallell beregning. GPUer er designet for slike beregninger, og de er designet for å enkelt kunne legges til stasjonære systemer.

Når du trenger å gjøre matriseberegninger i Python, er den første løsningen du finner numPy.  Imidlertid er NumPy ikke alltid det mest effektive systemet for beregning av mange matriser.
Dette innlegget vil dekke hvilke alternativer du har i Python.

Når du trenger alternativer, begynn med å se nøyere på hva du trenger matriseoperasjoner for. Din nåværende installasjon kan allerede ha, enten sin egen implementering, eller bruker et underliggende bibliotek. Et eksempel er maskinlæring, hvor behovet for matriseoperasjoner er av største betydning. TensorFlow har sitt eget bibliotek for matriseoperasjoner. Sørg for at du kjenner ditt nåværende bibliotek.

I mange tilfeller trenger du en løsning som fungerer for deg. Kanskje det er begrensninger i NumPy, noen biblioteker er raskere enn NumPy og spesielt laget for matriser. Mange ganger vil utviklere øke hastigheten på koden, slik at de begynner å lete etter alternativer. En grunn er at NumPy ikke kan kjøre på GPUer.

Mens dette innlegget handler om alternativer til NumPy, et bibliotek bygget på toppen av NumPy, må Theano-biblioteket nevnes. Theano-biblioteket er tett integrert med NumPy og muliggjør GPU-støttet matrise. Theano er et større bibliotek for maskinlæring, men du kan bare løfte ut matrisefunksjonene.

For en dypere forklaring på bruk av Theano, se denne siden: http: // www.marekrei.com / blog / theano-tutorial /

SpPy er et bibliotek spesielt for sparsomme matriser, det kan fortsatt brukes til matriser. En sparsom matrise er forresten en matrise som har mange nullverdier. Dette biblioteket er lite og effektivt, men litt begrenset på grunn av spesialiseringen. Den bruker også NumPy, men er mer effektiv enn bare NumPy.
https: // pythonhosted.org / sppy /

Eigen er en effektiv implementering av matriser, for å bruke den i Python trenger du miniEigen, tilgjengelig på https: // pypi.org / pypi / minieigen. Eigen er faktisk inkludert i mange andre løsninger. Det fungerer som det generiske matrisebiblioteket for mer spesialiserte moduler og rammer. Dette biblioteket har mange moduler for tett matrise og arraymanipulering. Den støtter også lineær algebra, nedbrytning og sparsom lineær algebra. Pakken har også en plugin-funksjon slik at du kan legge til dine egne moduler.
For å bruke Eigen, installer den med pip og importer den i koden din.

PyTorch er et bibliotek for maskinlæring, på grunn av dette har det matriseoperasjoner. Å importere hele biblioteket er for mye hvis du bare vil gjøre noen få beregninger. Men hvis du nettopp har begynt med et maskinlæringsprosjekt, må du sørge for at du bestemmer deg for om dette er noe for deg.
Et annet alternativ er å hente et hvilket som helst C-bibliotek og bruke det. For å gjøre dette mulig, er det en løsning som heter cffi som vil skape grensesnittet for deg. Denne løsningen krever at du allerede kjenner C, og at du lager en wrapper for hver funksjon du trenger. Koden vil da se forvirret og vanskelig å lese, men dette kan være verdt det, avhengig av prosjektet ditt.

Hvis du bare vil øke hastigheten på alle matrise- og numeriske funksjoner, kan du bruke numba i stedet. Numba er en Python-kompilator. Når du bruker den, lager kompilatoren binær kode 'akkurat i tide', jit. Ideen om jit brukes oftere med Java, men er veldig nyttig for tung matematikk i Python. Siden Python tolkes, kan du få ytelsesproblemer med tung matematikk, numba tar seg av dette ved å kompilere til CPU eller GPU etter eget valg.
Det er også tilgjengelige parallelle databehandlingsfunksjoner, som standard kjører kompilatoren med en lås som hindrer at mange tråder kjører samtidig. Du kan slå dette av med et flagg så lenge du er klar over potensielle problemer forbundet med parallell programmering.

Konklusjon

Mange ganger når du begynner å programmere i Python eller andre språk, får du begrensninger i språket, kompilatoren eller noe annet. Når du er i denne situasjonen, bør du stoppe opp og tenke på hvilken begrensning du har og vurdere hvor mange andre som kan ha hatt den samme situasjonen. I tilfelle Python og NumPy har mange forskere og utviklere skrevet kode som trenger rask utførelse. Denne arven har skapt et stort antall grener som kan løse problemet ditt uten å tvinge deg til å bytte språk eller skrive en ny utvidelse til dette språket.

Hvordan laste ned og spille Sid Meier's Civilization VI på Linux
Introduksjon til spillet Civilization 6 er et moderne syn på det klassiske konseptet som ble introdusert i serien av Age of Empires-spillene. Ideen va...
Hvordan installere og spille Doom på Linux
Introduksjon til Doom Doom-serien stammer fra 90-tallet etter utgivelsen av den originale Doom. Det ble en øyeblikkelig suksess, og fra den tiden og u...
Vulkan for Linux-brukere
Med hver nye generasjon grafikkort ser vi spillutviklere skyve grensene for grafisk troskap og komme et skritt nærmere fotorealisme. Men til tross for...