Articles

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 bibliotek i Python. Denne lektion er et meget godt udgangspunkt, hvis du kommer i gang med datalogi og har brug for en indledende matematisk oversigt over disse komponenter, og hvordan vi kan lege med dem ved hjælp af NumPy i kode.

numpy library giver os mulighed for at udføre forskellige operationer, der skal udføres på datastrukturer, der ofte bruges i maskinlæring og datalogi som vektorer, matricer og arrays. Vi vil kun vise de mest almindelige operationer med NumPy, som bruges i mange Maskinlæringsrørledninger. Endelig skal du bemærke, 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 i gang.

Hvad er en vektor?

ifølge Google er en vektor en mængde, der har retning såvel som størrelse, især som bestemmelse af 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ækkevektor = np.array ()
print (rækkevektor)

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

Importer numpy som np
col_vector = np.array (,,])
print (col_vector)

at lave en matrice

en matrice kan simpelthen forstås som et todimensionelt array. Vi kan lave en matrice med NumPy ved at lave et multidimensionelt array:

matrice = np.array (,,])
print(matrice)

selvom matricen nøjagtigt ligner multidimensionel array, anbefales matricen datastruktur 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 matrice

ved hjælp af en sparsom Matrice

for at minde om, er en sparsom matrice den, hvor de fleste af elementerne er nul. Nu er et almindeligt scenario inden for databehandling og maskinindlæring behandling af matricer, hvor de fleste af elementerne er nul. En matrice, 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 matrice være nul. Fordelen med sparsom matrice er, at den ikke gemmer de værdier, der er nul. Dette resulterer også i en enorm beregningsfordel og lageroptimering.

lad os oprette en gnistmatrice her:

for at forstå, hvordan koden fungerer, vil vi se på output her:

i ovenstående kode brugte vi en Numpys funktion til at oprette en komprimeret sparsom rækkematrice, hvor ikke-nulelementer er repræsenteret ved hjælp af de nulbaserede indekser. Der er forskellige slags sparsomme matricer, 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 det samme. Lad os se nogle kodestykker for det samme:

matrice = np.array (,
,
])
mul_5 = lambda: * 5
vektoriseret_mul_5 = np.for at forstå, hvordan koden fungerer, vil vi se på output her:

i ovenstående kodestykke brugte vi vektoriseringsfunktion, som er en del af numpy-biblioteket, til at omdanne en simpel Lambda-definition til en funktion, der kan bruges til at behandle hvert element af vektoren. Det er vigtigt at bemærke, at vektorisering kun er en løkke over elementerne, og det har ingen indflydelse på programmets ydeevne. NumPy tillader også udsendelse, hvilket betyder, at vi i stedet for ovenstående komplekse kode simpelthen kunne have gjort:

matrice * 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!

middelværdi, varians og standardafvigelse

Med NumPy er det nemt at udføre operationer relateret til beskrivende statistik på vektorer. Gennemsnit af en vektor kan beregnes som:

NP.vektorens varians kan beregnes som:

NP.standardafvigelse for en vektor kan beregnes som:

NP.output af ovenstående kommandoer på den givne matrice er givet her:

transponering af en matrice

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 kolonne-og rækkeværdier på en matrice. Bemærk, at en vektor ikke kan transponeres, da en vektor kun er en samling af værdier, uden at disse værdier kategoriseres 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 anvendelsesområde).

For nu vil vi finde fred bare ved at gennemføre en matrice. Det er meget nemt at få adgang til transponeringen af en matrice med NumPy:

matrice.T

udgangen af ovenstående kommando på den givne matrice er angivet her:

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

udfladning af en matrice

Vi kan konvertere en matrice til et endimensionelt array, hvis vi ønsker at behandle dets elementer lineært. Dette kan gøres med følgende kodestykke:

matrice.flad ()

udgangen af ovenstående kommando på den givne matrice er givet her:

Bemærk, at fladmatricen er et endimensionelt array, simpelthen lineært på mode.

beregning af egenværdier og egenvektorer

egenvektorer bruges meget ofte i Maskinindlæringspakker. Så når en lineær transformationsfunktion præsenteres som en matrice, er Eigenvektorer de vektorer, der kun ændrer sig i skala af vektoren, men ikke dens retning. Vi kan sige, at:

HV = yv

Her er den firkantede Matrice, og Kris indeholder egenværdierne. V indeholder også Egenvektorerne. Med NumPy er det nemt at beregne egenværdier og egenvektorer. Her er kodestykket, hvor vi demonstrerer det samme:

evalues, evectors = np.linalg.EIG (matrice)

udgangen af ovenstående kommando på den givne matrice er givet her:

Dot produkter af vektorer

Dot produkter af vektorer er en måde at multiplicere 2 vektorer på. Det fortæller dig om, hvor meget af vektorerne der 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 ()
b = np.array ()
np.dot (A, b)

udgangen 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 ret ligetil drift 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 matrice to gange:

np.dernæst kan to matricer trækkes fra som:

NP.subtrahere (matrice, matrice)

udgangen af ovenstående kommando på den givne matrice er angivet her:

som forventet tilføjes/subtraheres hvert af elementerne i matricen med det tilsvarende element. Multiplikation af en matrice svarer til at finde dot-produktet, som vi gjorde tidligere:

NP.dot (matricer, matricer)

ovenstående kode finder den sande multiplikationsværdi af to matricer, angivet som:

matrice * matrice

udgangen af ovenstående kommando på den givne matrice er givet her:

konklusion

i denne lektion gennemgik vi en masse matematiske operationer relateret til vektorer, matricer og arrays, der ofte bruges databehandling, beskrivende statistik og datalogi. Dette var en hurtig lektion, der kun dækkede de mest almindelige og vigtigste dele af den brede vifte af koncepter, men disse operationer skulle give en meget god ide om, hvad alle operationer kan udføres, mens de beskæftiger sig med disse datastrukturer.

venligst dele din feedback frit om lektionen på kvidre med @ og @ sbmaggarval (det er mig!).