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 npræ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 npcol_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:
- Arrayet er standarden, når det kommer til NumPy-pakken
- 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 sparsomoriginal_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:
- Komprimeret sparsom kolonne
- Liste over lister
- Ordbog over nøgler
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 * 5Og 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.TOutputtet 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 = γvHer 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!).