Datalogi

Python-vektorer, matricer og arrays med NumPy

Python-vektorer, matricer og arrays med NumPy
I denne lektion vil vi se på nogle pæne tip og tricks til at lege med vektorer, matricer og arrays ved hjælp af NumPy-biblioteket i Python. Denne lektion er et meget godt udgangspunkt, hvis du kommer i gang med datalogi 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-biblioteket giver os mulighed for at udføre forskellige operationer, der skal udføres på datastrukturer, der ofte bruges i maskinindlæring og datalogi som vektorer, matricer og arrays. Vi viser kun de mest almindelige operationer med NumPy, som bruges i mange Machine Learning-rørledninger. Endelig skal du være opmærksom på, at NumPy kun er en måde at udføre operationerne på, så de matematiske operationer, vi viser, er hovedfokus for denne lektion og ikke selve NumPy-pakken. Lad os komme igang.

Hvad er en vektor?

Ifølge Google er en vektor en størrelse, der har retning såvel som størrelsesorden, især når man bestemmer placeringen af ​​et punkt i rummet i forhold til et andet.

Vektorer er meget vigtige i maskinindlæring, da de ikke kun beskriver størrelsen, men også retningen af ​​funktionerne. Vi kan oprette en vektor i NumPy med følgende kodestykke:

importer numpy som np
række_vektor = np.matrix ([1,2,3])
udskriv (række_vektor)

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

importer numpy som np
col_vector = np.matrix ([[1], [2], [3]])
udskriv (col_vector)

At lave en matrix

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

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

Selvom matrix nøjagtigt svarer til flerdimensionelt array, matrixdatastrukturen anbefales ikke på grund af to grunde:

  1. Arrayet er standarden, når det kommer til NumPy-pakken
  2. De fleste af operationerne 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 varerne er nul. Nu er et almindeligt scenario i databehandling og maskinindlæring at behandle 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 beregningsfordel og lageroptimering.

Lad os oprette en gnistmatrix her:

fra scipy import sparsom
original_matrix = np.array ([[1, 0, 3], [0, 0, 6], [7, 0, 0]])
sparse_matrix = sparsom.csr_matrix (original_matrix)
udskriv (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 nul-baserede indekser. Der er forskellige slags sparsom matrix, som:

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

Anvendelse af operationer på 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 til det samme:

matrix = np.array ([
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
mul_5 = lambda x: x * 5
vectorized_mul_5 = np.vektoriser (mul_5)
vectorized_mul_5 (matrix)

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

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

matrix * 5

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

Middel, variation og standardafvigelse

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

np.middelværdi (matrix)

Varians af en vektor kan beregnes som:

np.var (matrix)

Standardvej for en vektor kan beregnes som:

np.std (matrix)

Output af ovenstående kommandoer på den givne matrix er angivet 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 bytte kolonneformat og rækkeværdier i en matrix. Bemærk, at en vektor kan ikke transponeres som en vektor er bare en samling 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 transponeres (baseret på definitionerne af lineær algebra, hvilket er uden for omfanget af denne lektion).

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

matrix.T

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

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

Fladning af en matrix

Vi kan konvertere en matrix til et endimensionelt array, hvis vi ønsker at behandle dens 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 angivet her:

Bemærk, at fladmatrixen er et endimensionelt array, 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 vektorens skala, men ikke dens retning. Det kan vi godt sige:

Xv = γv

Her er X den firkantede matrix, og γ indeholder Eigenværdierne. Også v indeholder Eigenvectors. Med NumPy er det let at beregne Eigenvalues ​​og Eigenvectors. Her er kodestykket, hvor vi demonstrerer det samme:

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

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

Prikprodukter af vektorer

Dot Products of Vectors er en måde at multiplicere 2 vektorer på. 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 vektorerne 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 ([23, 15, 1])
np.prik (a, b)

Output af ovenstående kommando på de givne arrays er angivet her:

Tilføje, trække og multiplicere matricer

Tilføjelse og fratrækning af flere matricer er ret ligetil operation 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 simpelt bruger vi den samme matrix to gange:

np.tilføj (matrix, matrix)

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

np.trække (matrix, matrix)

Outputtet af ovenstående kommando på den givne matrix er angivet 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.prik (matrix, matrix)

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

matrix * matrix

Output af ovenstående kommando på den givne matrix er angivet her:

Konklusion

I denne lektion gennemgik vi mange matematiske operationer relateret til vektorer, matricer og arrays, som ofte bruges Databehandling, beskrivende statistik og datalogi. Dette var en hurtig lektion, der kun dækkede de mest almindelige og vigtigste afsnit i den brede vifte af begreber, men disse operationer skulle give en meget god idé om, hvad alle operationer kan udføres, mens man håndterer disse datastrukturer.

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

Mus Top 5 ergonomiske computermusprodukter til Linux
Top 5 ergonomiske computermusprodukter til Linux
Forårsager langvarig brug af computeren smerter i dit håndled eller fingre? Lider du af stive led og er konstant nødt til at ryste hænderne? Føler du ...
Mus Sådan ændres mus og touchpad-indstillinger ved hjælp af Xinput i Linux
Sådan ændres mus og touchpad-indstillinger ved hjælp af Xinput i Linux
De fleste Linux-distributioner leveres som standard med "libinput" -biblioteket til at håndtere inputhændelser på et system. Det kan behandle inputhæn...
Mus Remap dine museknapper forskelligt til anden software med X-Mouse Button Control
Remap dine museknapper forskelligt til anden software med X-Mouse Button Control
Måske har du brug for et værktøj, der kan ændre din muses kontrol med hver applikation, du bruger. Hvis dette er tilfældet, kan du prøve en applikatio...