Datavetenskap

Hur man beräknar matriser i Python utan NumPy

Hur man beräknar matriser i Python utan NumPy
För många applikationer behöver du matematik. I Python finns det matematikmodulen som hanterar grunderna som avrundning, faktoria och avrundningsfunktioner. Det inkluderar också Power & logaritmisk, trigonometri, vinkel och hyperboliska funktioner. För komplexa nummer är modulen cmath. Dessa hanterar dock inte matrisoperationer.

Vad är skillnaden mellan matriser och matriser??

Vissa människor letar efter matrislösningar för matrisproblem, så vad är skillnaden?  Den stora skillnaden är att matrisvärden är siffror, en matris kan innehålla annan information, till och med strängar.  Matriser kan representera ekvationer, det är här de flesta utvecklare behöver dem, åtminstone när NumPy ersätts.

Hur gör man en matrisberäkning?

Standardmatrisoperationerna är enkla att göra, när du lägger till lägger du bara till elementen, när du multiplicerar kan du använda en skalär till varje element och så vidare.

Multiplikation är lite mer komplex men med mycket lite. Det som gör det tungt är att du måste göra många beräkningar för varje lösning, det är här prestanda kommer in. Eftersom majoriteten av beräkningarna inte är beroende av varandra är dessa beräkningar utmärkta kandidater för parallell beräkning. GPU: er är utformade för den här typen av beräkningar och de är utformade för att enkelt kunna läggas till på stationära system.

När du behöver göra matrisberäkningar i Python är den första lösningen du hittar numPy.  NumPy är dock inte alltid det mest effektiva systemet för beräkning av många matriser.
Det här inlägget kommer att täcka vilka alternativ du har i Python.

När du behöver alternativ, börja med att titta mer noggrant på vad du behöver matrisoperationer för. Din nuvarande installation kan redan ha antingen sin egen implementering eller använder ett underliggande bibliotek. Ett exempel är maskininlärning, där behovet av matrisoperationer är av största vikt. TensorFlow har ett eget bibliotek för matrisoperationer. Se till att du känner till ditt nuvarande bibliotek.

I många fall behöver du dock en lösning som fungerar för dig. Kanske finns det begränsningar i NumPy, vissa bibliotek är snabbare än NumPy och speciellt gjorda för matriser. Många gånger vill utvecklare påskynda sin kod så att de börjar leta efter alternativ. En anledning är att NumPy inte kan köras på GPU: er.

Medan det här inlägget handlar om alternativ till NumPy, ett bibliotek byggt ovanpå NumPy, måste Theano-biblioteket nämnas. Theano-biblioteket är tätt integrerat med NumPy och möjliggör GPU-matris. Theano är ett större bibliotek för maskininlärning men du kan bara lyfta ut matrisfunktionerna.

För en djupare förklaring av hur du använder Theano, se den här sidan: http: // www.marekrei.com / blogg / theano-tutorial /

SpPy är ett bibliotek speciellt för glesa matriser, det kan fortfarande användas för matriser. En gles array är förresten en array som har många nollvärden. Detta bibliotek är litet och effektivt men lite begränsat på grund av dess specialisering. Den använder också NumPy men är effektivare än bara NumPy.
https: // pythonhosted.org / sppy /

Eigen är en effektiv implementering av matriser, för att använda den i Python behöver du miniEigen, tillgänglig på https: // pypi.org / pypi / minieigen. Eigen ingår faktiskt i många andra lösningar. Det fungerar som det generiska matrisbiblioteket för mer specialiserade moduler och ramar. Detta bibliotek har många moduler för tät matris- och arraymanipulation. Den stöder också linjär algebra, sönderdelning och gles linjär algebra. Paketet har också en plugin-funktion så att du kan lägga till dina egna moduler.
För att använda Eigen, installera den med pip och importera den i din kod.

PyTorch är ett bibliotek för maskininlärning, på grund av detta har det matrisoperationer. Att importera hela biblioteket är överdrivet om du bara vill göra några beräkningar. Men om du precis har börjat med ett maskininlärningsprojekt, se till att du bestämmer om det här är något för dig.
Ett annat alternativ är att hämta något C-bibliotek och använda det. För att göra detta möjligt finns det en lösning som heter cffi som skapar gränssnittet för dig. Denna lösning kräver att du redan känner till C och att du skapar ett omslag för varje funktion du behöver. Koden kommer då att se förvirrad och svårläst men det kan vara värt det beroende på ditt projekt.

Om du bara vill påskynda alla array- och numeriska funktioner kan du använda numba istället. Numba är en Python-kompilator. När du använder den skapar kompilatorn binär kod 'just in time', jit. Idén med jit används oftare med Java men är mycket användbar för tung matematik i Python. Eftersom Python tolkas kan du få prestandaproblem med tung matematik, numba tar hand om detta genom att kompilera till CPU eller GPU efter eget val.
Det finns också parallella datorfunktioner tillgängliga, som standard kör kompilatorn med ett lås som hindrar många trådar från att köras samtidigt. Du kan stänga av detta med en flagga så länge du är medveten om de potentiella problem som uppstår vid parallell programmering.

Slutsats

Många gånger när du börjar programmera på Python eller andra språk, stöter du på begränsningar för språket, kompilatorn eller något annat. När du befinner dig i den här situationen bör du stanna upp och fundera över vilken begränsning du har och överväga hur många andra som kan ha haft samma situation. I fallet med Python och NumPy har många forskare och utvecklare skrivit kod som kräver snabb körning. Detta arv har skapat ett stort antal grenar som kan lösa ditt problem utan att tvinga dig att byta språk eller skriva ett nytt tillägg till just detta språk.

SuperTuxKart för Linux
SuperTuxKart är en fantastisk titel som är utformad för att ge dig Mario Kart-upplevelsen gratis på ditt Linux-system. Det är ganska utmanande och rol...
Battle for Wesnoth Tutorial
Slaget om Wesnoth är ett av de mest populära open source-strategispel som du kan spela just nu. Det här spelet har inte bara utvecklats under mycket l...
0 A.D. Handledning
Av de många strategispelen där ute, 0 A.D. lyckas framstå som en omfattande titel och ett mycket djupt, taktiskt spel trots att det är öppen källkod. ...