Python: Vektorer, matricer og arrays med NumPy

Python Vectors Matrices



I denne lektion ser vi på nogle gode tips og tricks til at lege med vektorer, matricer og arrays ved hjælp af NumPy -bibliotek i Python. Denne lektion er et meget godt udgangspunkt, hvis du kommer i gang med datavidenskab og har brug for et indledende matematisk overblik over disse komponenter, og hvordan vi kan lege med dem ved hjælp af NumPy i kode.

NumPy bibliotek giver os mulighed for at udføre forskellige operationer, som skal udføres på datastrukturer, der ofte bruges i maskinlæring og datavidenskab som vektorer, matricer og arrays. Vi viser kun de mest almindelige operationer med NumPy, der bruges i mange Machine Learning -rørledninger. Bemærk endelig, at NumPy bare er en måde at udføre operationerne på, så de matematiske operationer, vi viser, er hovedfokus for denne lektion og ikke NumPy -pakken i sig selv. Lad os komme igang.







Hvad er en vektor?

Ifølge Google er en vektor en størrelse, der har retning såvel som størrelse, især som bestemmelse af positionen for et punkt i rummet i forhold til et andet.





Vektorer er meget vigtige i Machine Learning, da de ikke bare beskriver størrelsen, men også funktionernes retning. Vi kan oprette en vektor i NumPy med følgende kodestykke:





import numpysomf.eks

row_vector = np.array([1,2,3])
Print(række_vektor)

I ovenstående kodestykke lavede vi en rækkevektor. Vi kan også oprette en kolonnevektor som:

import numpysomf.eks

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

At lave en matrix

En matrix kan simpelthen forstås som et todimensionalt array. Vi kan lave en matrix med NumPy ved at lave et multidimensionalt array:



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

Selvom matrix nøjagtigt ligner multi-dimensionel array, matrixdatastrukturen anbefales ikke af to grunde:

  1. Arrayen er standarden, når det kommer til NumPy -pakken
  2. De fleste operationer med NumPy returnerer arrays og ikke en matrix

Brug af en sparsom matrix

For at minde om er en sparsom matrix den, hvor de fleste af emnerne er nul. Nu er et almindeligt scenario inden for databehandling og maskinlæring behandling af matricer, hvor de fleste af elementerne er nul. Overvej f.eks. En matrix, hvis rækker beskriver hver video på Youtube, og kolonner repræsenterer hver registreret bruger. Hver værdi repræsenterer, om brugeren har set en video eller ej. Selvfølgelig vil størstedelen af ​​værdierne i denne matrix være nul. Det fordel med sparsom matrix er, at den ikke gemmer de værdier, der er nul. Dette resulterer også i en enorm beregningsmæssig fordel og lageroptimering.

Lad os lave en gnistmatrix her:

fra scipy import sparsom

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

For at forstå, hvordan koden fungerer, ser vi på output her:

I ovenstående kode brugte vi en NumPys funktion til at oprette en Komprimeret sparsom række matrix, hvor ikke-nul-elementer er repræsenteret ved hjælp af de nulbaserede indekser. Der er forskellige former for sparsom matrix, som:

  • Komprimeret sparsom søjle
  • Liste over lister
  • Ordbog med nøgler

Vi dykker ikke ned i andre sparsomme matricer her, men ved, at hver af deres anvendelser er specifikke, og ingen kan betegnes som 'bedste'.

Anvendelse af operationer til alle vektorelementer

Det er et almindeligt scenario, når vi skal anvende en fælles operation på flere vektorelementer. Dette kan gøres ved at definere en lambda og derefter vektorisere den samme. Lad os se et kodestykke for det samme:

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)

vektoriseret_mul_5(matrix)

For at forstå, hvordan koden fungerer, ser vi på output her:

I ovenstående kodestykke brugte vi vectorize -funktion, som er en del af NumPy -biblioteket, til at transformere en simpel lambda -definition til en funktion, der kan behandle hvert eneste element i vektoren. Det er vigtigt at bemærke, at vektorisering er bare en sløjfe over elementerne og det har ingen effekt på programmets ydeevne. NumPy tillader også udsendelse , hvilket betyder, at vi i stedet for ovenstående komplekse kode simpelthen kunne have gjort:

matrix* 5

Og resultatet ville have været nøjagtig det samme. Jeg ville først vise den komplekse del, ellers havde du sprunget over sektionen!

Middel, varians og standardafvigelse

Med NumPy er det let at udføre operationer relateret til beskrivende statistik over vektorer. Middelværdien af ​​en vektor kan beregnes som:

np. middel(matrix)

Variation af en vektor kan beregnes som:

np.var(matrix)

Standardafvigelse af en vektor kan beregnes som:

fx std(matrix)

Outputtet af ovenstående kommandoer på den givne matrix er givet her:

Transponering af en matrix

Transponering er en meget almindelig operation, som du vil høre om, når du er omgivet af matricer. Transponering er bare en måde at skifte søjle- og rækkeværdier i en matrix. Bemærk venligst, at a vektor kan ikke transponeres som en vektor er bare en samling af værdier, uden at disse værdier er kategoriseret i rækker og kolonner. Bemærk, at konvertering af en rækkevektor til en kolonnevektor ikke transponerer (baseret på definitionerne af lineær algebra, som ligger uden for denne lektions omfang).

For nu finder vi fred bare ved at transponere en matrix. Det er meget enkelt at få adgang til transponering af en matrix med NumPy:

matrix.T

Outputtet af ovenstående kommando på den givne matrix er givet her:

Samme operation kan udføres på en rækkevektor for at konvertere den til en kolonnevektor.

Udfladning af en matrix

Vi kan konvertere en matrix til et endimensionelt array, hvis vi ønsker at behandle dets elementer på en lineær måde. Dette kan gøres med følgende kodestykke:

matrix.flad()

Outputtet af ovenstående kommando på den givne matrix er givet her:

Bemærk, at fladmatrixen er en endimensionel matrix, simpelthen lineær.

Beregning af Eigenværdier og Eigenvektorer

Eigenvektorer bruges meget almindeligt i Machine Learning -pakker. Så når en lineær transformationsfunktion præsenteres som en matrix, så er X, Eigenvektorer de vektorer, der kun ændrer sig i vektoren, men ikke dens retning. Det kan vi godt sige:

Xv = γv

Her er X den firkantede matrix, og γ indeholder Eigenværdierne. V indeholder også Eigenvektorerne. Med NumPy er det let at beregne Eigenværdier og Eigenvektorer. Her er kodestykket, hvor vi demonstrerer det samme:

evalueringer, evektorer = np.linalg.eig(matrix)

Outputtet af ovenstående kommando på den givne matrix er givet her:

Dot -produkter af vektorer

Dot Products of Vectors er en måde at multiplicere 2 vektorer. Det fortæller dig om hvor meget af vektorerne er i samme retning , i modsætning til krydsproduktet, der fortæller dig det modsatte, hvor lidt vektorer er i samme retning (kaldet ortogonal). Vi kan beregne prikproduktet af to vektorer som angivet i kodestykket her:

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

np.dot(a, b)

Outputtet af ovenstående kommando på de givne arrays er givet her:

Tilføjelse, subtraktion og multiplikation af matricer

Tilføjelse og subtraktion af flere matricer er ganske ligetil i matricer. Der er to måder, hvorpå dette kan gøres. Lad os se på kodestykket for at udføre disse operationer. For at holde dette enkelt vil vi bruge den samme matrix to gange:

np. tilføj(matrix, matrix)

Dernæst kan to matricer trækkes fra som:

np. trække fra(matrix, matrix)

Outputtet af ovenstående kommando på den givne matrix er givet her:

Som forventet tilføjes/trækkes hvert af elementerne i matricen med det tilsvarende element. Multiplikation af en matrix svarer til at finde prikproduktet, som vi gjorde tidligere:

np.dot(matrix, matrix)

Ovenstående kode finder den sande multiplikationsværdi for to matricer givet som:

matrix*matrix

Outputtet af ovenstående kommando på den givne matrix er givet her:

Konklusion

I denne lektion gennemgik vi en masse matematiske operationer relateret til vektorer, matricer og arrays, som er almindeligt anvendt Databehandling, beskrivende statistik og datavidenskab. Dette var en hurtig lektion, der kun dækkede de mest almindelige og vigtigste afsnit af de mange forskellige begreber, men disse operationer skulle give en meget god idé om, hvad alle operationer kan udføres, mens disse datastrukturer behandles.

Del venligst din feedback frit om lektionen på Twitter med @linuxhint og @sbmaggarwal (det er mig!).