Python: vectoren, matrices en arrays met NumPy

Python Vectors Matrices



In deze les zullen we enkele handige tips en trucs bekijken om met vectoren, matrices en arrays te spelen met behulp van de NumPy-bibliotheek in Python. Deze les is een zeer goed startpunt als je begint met Data Science en een inleidend wiskundig overzicht van deze componenten nodig hebt en hoe we ermee kunnen spelen met behulp van NumPy in code.

Met de NumPy-bibliotheek kunnen we verschillende bewerkingen uitvoeren die moeten worden uitgevoerd op gegevensstructuren die vaak worden gebruikt in Machine Learning en Data Science, zoals vectoren, matrices en arrays. We zullen alleen de meest voorkomende bewerkingen met NumPy laten zien die in veel Machine Learning-pijplijnen worden gebruikt. Houd er ten slotte rekening mee dat NumPy slechts een manier is om de bewerkingen uit te voeren, dus de wiskundige bewerkingen die we laten zien, zijn de belangrijkste focus van deze les en niet het NumPy-pakket zelf. Laten we beginnen.







Wat is een vector?

Volgens Google is een vector een grootheid die zowel richting als grootte heeft, vooral om de positie van het ene punt in de ruimte ten opzichte van het andere te bepalen.





Vectoren zijn erg belangrijk in Machine Learning omdat ze niet alleen de grootte beschrijven, maar ook de richting van de functies. We kunnen een vector maken in NumPy met het volgende codefragment:





import numpyalsbijv

rij_vector = np.array([1,2,3])
afdrukken(rij_vector)

In het bovenstaande codefragment hebben we een rijvector gemaakt. We kunnen ook een kolomvector maken als:

import numpyalsbijv

col_vector = np.array([[1],[2],[3]])
afdrukken(col_vector)

Een matrix maken

Een matrix kan eenvoudig worden opgevat als een tweedimensionale array. We kunnen een matrix maken met NumPy door een multidimensionale array te maken:



matrix = np.array([[1,2,3],[4,5,6],[7,8,9]])
afdrukken(Matrix)

Hoewel matrix precies gelijk is aan multidimensionale array, de matrixgegevensstructuur wordt niet aanbevolen om twee redenen:

  1. De array is de standaard als het gaat om het NumPy-pakket
  2. De meeste bewerkingen met NumPy retourneren arrays en geen matrix

Een schaarse matrix gebruiken

Ter herinnering: een schaarse matrix is ​​degene waarin de meeste items nul zijn. Een veelvoorkomend scenario bij gegevensverwerking en machine learning is het verwerken van matrices waarin de meeste elementen nul zijn. Overweeg bijvoorbeeld een matrix waarvan de rijen elke video op YouTube beschrijven en de kolommen elke geregistreerde gebruiker vertegenwoordigen. Elke waarde geeft aan of de gebruiker een video heeft bekeken of niet. Natuurlijk zal de meerderheid van de waarden in deze matrix nul zijn. De voordeel met schaarse matrix is dat het de waarden die nul zijn niet opslaat. Dit resulteert in een enorm rekenvoordeel en ook in opslagoptimalisatie.

Laten we hier een vonkmatrix maken:

van scipy import schaars

originele_matrix = np.array([[1,0,3],[0,0,6],[7,0,0]])
sparse_matrix = sparse.csr_matrix(originele_matrix)
afdrukken(sparse_matrix)

Om te begrijpen hoe de code werkt, zullen we de output hier bekijken:

In de bovenstaande code hebben we de functie van een NumPy gebruikt om een ​​. te maken Gecomprimeerde dunne rij matrix waarin niet-nul-elementen worden weergegeven met behulp van de op nul gebaseerde indexen. Er zijn verschillende soorten schaarse matrix, zoals:

  • Gecomprimeerde dunne kolom
  • Lijst met lijsten
  • Woordenboek van sleutels

We zullen hier niet in andere schaarse matrices duiken, maar weet dat elk van hun gebruik specifiek is en dat niemand als 'beste' kan worden genoemd.

Bewerkingen toepassen op alle vectorelementen

Het is een veelvoorkomend scenario wanneer we een algemene bewerking op meerdere vectorelementen moeten toepassen. Dit kan worden gedaan door een lambda te definiëren en deze vervolgens te vectoriseren. Laten we eens een codefragment bekijken voor hetzelfde:

matrix = np.array([
[1,2,3],
[4,5,6],
[7,8,9]])

mul_5 = lambda x: x* 5
vectorized_mul_5 = np.vectorize(mul_5)

vectorized_mul_5(Matrix)

Om te begrijpen hoe de code werkt, zullen we de output hier bekijken:

In het bovenstaande codefragment hebben we de vectorize-functie gebruikt die deel uitmaakt van de NumPy-bibliotheek, om een ​​eenvoudige lambda-definitie om te zetten in een functie die elk element van de vector kan verwerken. Het is belangrijk op te merken dat vectoriseren is gewoon een lus over de elementen en het heeft geen effect op de prestaties van het programma. NumPy staat ook toe uitzenden , wat betekent dat we in plaats van de bovenstaande complexe code eenvoudig hadden kunnen doen:

Matrix* 5

En het resultaat zou precies hetzelfde zijn geweest. Ik wilde eerst het complexe deel laten zien, anders had je het gedeelte overgeslagen!

Gemiddelde, variantie en standaarddeviatie

Met NumPy is het eenvoudig om bewerkingen uit te voeren met betrekking tot beschrijvende statistieken over vectoren. Het gemiddelde van een vector kan worden berekend als:

np.mean(Matrix)

Variantie van een vector kan worden berekend als:

np.var(Matrix)

De standaarddeviatie van een vector kan worden berekend als:

bijv. standaard(Matrix)

De uitvoer van de bovenstaande opdrachten op de gegeven matrix wordt hier gegeven:

Een matrix transponeren

Transponeren is een veel voorkomende bewerking die u zult horen als u omringd bent door matrices. Transponeren is slechts een manier om kolom- en rijwaarden van een matrix om te wisselen. Houd er rekening mee dat een vector kan niet worden getransponeerd omdat een vector slechts een verzameling waarden is zonder dat die waarden in rijen en kolommen worden gecategoriseerd. Houd er rekening mee dat het converteren van een rijvector naar een kolomvector geen transponeren is (gebaseerd op de definities van lineaire algebra, wat buiten het bestek van deze les valt).

Voor nu zullen we vrede vinden door een matrix te transponeren. Het is heel eenvoudig om toegang te krijgen tot het transponeren van een matrix met NumPy:

matrix.T

De uitvoer van het bovenstaande commando op de gegeven matrix wordt hier gegeven:

Dezelfde bewerking kan worden uitgevoerd op een rijvector om deze om te zetten in een kolomvector.

Een matrix afvlakken

We kunnen een matrix omzetten in een eendimensionale array als we de elementen ervan op een lineaire manier willen verwerken. Dit kan met het volgende codefragment:

matrix.flatten()

De uitvoer van het bovenstaande commando op de gegeven matrix wordt hier gegeven:

Merk op dat de afgeplatte matrix een eendimensionale matrix is, eenvoudigweg lineair in de mode.

Eigenwaarden en eigenvectoren berekenen

Eigenvectoren worden veel gebruikt in Machine Learning-pakketten. Dus, wanneer een lineaire transformatiefunctie wordt gepresenteerd als een matrix, dan zijn X, Eigenvectoren de vectoren die alleen in schaal van de vector veranderen, maar niet in zijn richting. We kunnen stellen dat:

Xv = v

Hierbij is X de vierkante matrix en bevat γ de eigenwaarden. Ook bevat v de eigenvectoren. Met NumPy is het eenvoudig om eigenwaarden en eigenvectoren te berekenen. Hier is het codefragment waar we hetzelfde demonstreren:

evalueert, evectoren = np.linalg.eig(Matrix)

De uitvoer van het bovenstaande commando op de gegeven matrix wordt hier gegeven:

Puntproducten van vectoren

Dot Products of Vectors is een manier om 2 vectoren te vermenigvuldigen. Het vertelt je over hoeveel van de vectoren zijn in dezelfde richting , in tegenstelling tot het uitwendige product dat u het tegenovergestelde vertelt, hoe weinig de vectoren in dezelfde richting zijn (orthogonaal genoemd). We kunnen het puntproduct van twee vectoren berekenen zoals hier in het codefragment wordt gegeven:

a = np.array([3,5,6])
b = np.array([2. 3,vijftien,1])

np.punt(een, b)

De uitvoer van de bovenstaande opdracht op de gegeven arrays wordt hier gegeven:

Matrices optellen, aftrekken en vermenigvuldigen

Het optellen en aftrekken van meerdere matrices is een vrij eenvoudige bewerking in matrices. Er zijn twee manieren waarop dit kan. Laten we eens kijken naar het codefragment om deze bewerkingen uit te voeren. Om dit eenvoudig te houden, zullen we dezelfde matrix twee keer gebruiken:

np.add(matrix, matrix)

Vervolgens kunnen twee matrices worden afgetrokken als:

np.aftrekken(matrix, matrix)

De uitvoer van het bovenstaande commando op de gegeven matrix wordt hier gegeven:

Zoals verwacht wordt elk van de elementen in de matrix opgeteld/afgetrokken met het corresponderende element. Het vermenigvuldigen van een matrix is ​​vergelijkbaar met het vinden van het puntproduct zoals we eerder deden:

np.punt(matrix, matrix)

De bovenstaande code vindt de echte vermenigvuldigingswaarde van twee matrices, gegeven als:

Matrix*Matrix

De uitvoer van het bovenstaande commando op de gegeven matrix wordt hier gegeven:

Conclusie

In deze les hebben we veel wiskundige bewerkingen doorgenomen met betrekking tot vectoren, matrices en arrays, die veelgebruikte gegevensverwerking, beschrijvende statistiek en gegevenswetenschap zijn. Dit was een snelle les die alleen de meest voorkomende en belangrijkste secties van de grote verscheidenheid aan concepten omvatte, maar deze bewerkingen zouden een heel goed idee moeten geven van welke bewerkingen kunnen worden uitgevoerd bij het omgaan met deze gegevensstructuren.

Deel uw feedback over de les vrijelijk op Twitter met @linuxhint en @sbmaggarwal (dat ben ik!).