Gegevenswetenschap

Matrices berekenen in Python zonder NumPyP

Matrices berekenen in Python zonder NumPyP
Voor veel toepassingen heb je wiskunde nodig. In Python is er de wiskundemodule die de basis afhandelt, zoals afrondings-, faculteits- en afrondingsfuncties. Het bevat ook macht en logaritmische, trigonometrie, hoekige en hyperbolische functies. Voor complexe getallen is de module cmath. Deze behandelen echter geen matrixbewerkingen.

Wat is het verschil tussen arrays en matrices??

Sommige mensen zijn op zoek naar matrixoplossingen voor arrayproblemen, dus wat is het verschil??  Het grote verschil is dat matrixwaarden getallen zijn, een array kan andere informatie bevatten, zelfs strings.  Matrices kunnen vergelijkingen vertegenwoordigen, dit is waar de meeste ontwikkelaars ze nodig hebben, tenminste in het geval van vervanging van NumPy.

Hoe maak je een matrixberekening??

De standaard matrixbewerkingen zijn eenvoudig uit te voeren, bij het toevoegen voegt u gewoon de elementen toe, bij vermenigvuldigen kunt u een scalair gebruiken voor elk element enzovoort.

Vermenigvuldigen is iets ingewikkelder, maar met heel weinig. Wat het zwaar maakt, is dat je voor elke oplossing veel berekeningen moet doen, dit is waar de prestaties om de hoek komen kijken. Aangezien de meeste berekeningen niet van elkaar afhankelijk zijn, zijn deze berekeningen uitstekende kandidaten voor parallelle berekeningen. GPU's zijn ontworpen voor dit soort berekeningen en ze zijn ontworpen om eenvoudig aan desktopsystemen te worden toegevoegd.

Als je matrixberekeningen in Python moet doen, is de eerste oplossing die je vindt numPy.  NumPy is echter niet altijd het meest efficiënte systeem voor het berekenen van veel matrices.
Dit bericht behandelt welke opties je hebt in Python.

Als je alternatieven nodig hebt, begin dan met nauwkeuriger te kijken waarvoor je matrixbewerkingen nodig hebt. Uw huidige installatie heeft mogelijk al een eigen implementatie of gebruikt een onderliggende bibliotheek. Een voorbeeld is Machine Learning, waar de behoefte aan matrixbewerkingen voorop staat. TensorFlow heeft zijn eigen bibliotheek voor matrixbewerkingen. Zorg ervoor dat u uw huidige bibliotheek kent.

In veel gevallen heeft u echter een oplossing nodig die voor u werkt. Misschien zijn er beperkingen in NumPy, sommige bibliotheken zijn sneller dan NumPy en speciaal gemaakt voor matrices. Vaak willen ontwikkelaars hun code versnellen, zodat ze op zoek gaan naar alternatieven. Een reden is dat NumPy niet op GPU's kan draaien.

Hoewel dit bericht gaat over alternatieven voor NumPy, een bibliotheek die bovenop NumPy is gebouwd, moet de Theano-bibliotheek worden genoemd. De Theano-bibliotheek is nauw geïntegreerd met NumPy en maakt GPU-ondersteunde matrix mogelijk. Theano is een grotere bibliotheek voor machine learning, maar je kunt alleen de matrixfuncties eruit halen.

Voor een diepere uitleg over het gebruik van Theano, zie deze pagina: http://www.marekrei.com/blog/theano-tutorial/

SpPy is een bibliotheek speciaal voor schaarse arrays, het kan nog steeds worden gebruikt voor matrices. Een schaarse array is trouwens een array die veel nulwaarden bevat. Deze bibliotheek is klein en efficiënt, maar een beetje beperkt vanwege zijn specialisatie. Het gebruikt ook NumPy, maar is efficiënter dan alleen NumPyP.
https://pythonhosted.org/sppy/

Eigen is een efficiënte implementatie van matrices, om het in Python te gebruiken heb je miniEigen nodig, beschikbaar op https://pypi.org/pypi/minieigen. Eigen is eigenlijk opgenomen in veel andere oplossingen. Het fungeert als de generieke matrixbibliotheek voor meer gespecialiseerde modules en frameworks. Deze bibliotheek heeft veel modules voor manipulatie van dichte matrix en array. Het ondersteunt ook lineaire algebra, ontleding en schaarse lineaire algebra. Het pakket heeft ook een plug-in-functie, zodat u uw eigen modules kunt toevoegen.
Om Eigen te gebruiken, installeer het met pip en importeer het in je code.

PyTorch is een bibliotheek voor Machine Learning, daarom heeft het matrixbewerkingen. Het importeren van de hele bibliotheek is overkill als je maar een paar berekeningen wilt maken. Als je echter net begint met een machine learning-project, zorg er dan voor dat je beslist of dit iets voor jou is.
Een ander alternatief is om elke C-bibliotheek op te halen en die te gebruiken. Om dit mogelijk te maken, is er een oplossing genaamd cffi die de interface voor u zal maken. Deze oplossing vereist dat je C al kent en dat je een wrapper maakt voor elke functie die je nodig hebt. De code ziet er dan verward en moeilijk te lezen uit, maar dit kan de moeite waard zijn, afhankelijk van uw project.

Als je alleen alle array- en numerieke functies wilt versnellen, kun je in plaats daarvan numba gebruiken. Numba is een Python-compiler. Als je het gebruikt, zal de compiler 'just in time' binaire code maken, jit. Het idee van jit wordt vaker gebruikt met Java, maar is erg handig voor zware wiskunde in Python. Omdat Python wordt geïnterpreteerd, kun je prestatieproblemen krijgen met zware wiskunde, numba zorgt hiervoor door naar keuze naar CPU of GPU te compileren.
Er zijn ook parallelle computerfuncties beschikbaar, standaard draait de compiler met een slot dat voorkomt dat veel threads tegelijkertijd worden uitgevoerd. U kunt dit uitschakelen met een vlag, zolang u zich bewust bent van de mogelijke problemen die gepaard gaan met parallel programmeren.

Conclusie

Wanneer je begint met programmeren in Python of andere talen, loop je vaak tegen beperkingen aan van de taal, compiler of iets anders. Wanneer u zich in deze situatie bevindt, moet u stoppen en nadenken over welke beperking u heeft en overwegen hoeveel anderen dezelfde situatie hebben gehad. In het geval van Python en NumPy hebben veel wetenschappers en ontwikkelaars code geschreven die snel moet worden uitgevoerd. Deze erfenis heeft een groot aantal branches gecreëerd die uw probleem kunnen oplossen zonder u te dwingen van taal te veranderen of een nieuwe extensie voor deze specifieke taal te schrijven.

Strijd om Wesnoth 1.13.6 Ontwikkeling vrijgegeven
Strijd om Wesnoth 1.13.6 die vorige maand werd uitgebracht, is de zesde ontwikkelingsrelease in de 1.13.x-serie en het levert een aantal verbeteringen...
Hoe League Of Legends op Ubuntu 14 te installeren.04
Als je fan bent van League of Legends, dan is dit een kans voor jou om League of Legends te testen. Merk op dat LOL wordt ondersteund op PlayOnLinux a...
Installeer de nieuwste OpenRA Strategy Game op Ubuntu Linux
OpenRA is een Libre/Free Real Time Strategy-game-engine die de vroege Westwood-games nabootst, zoals de klassieke Command & Conquer: Red Alert. Gedist...