Python: Vektorer, matriser og matriser med NumPy

Python Vectors Matrices



I denne leksjonen vil vi se på noen fine tips og triks for å leke med vektorer, matriser og matriser ved hjelp av NumPy -biblioteket i Python. Denne leksjonen er et veldig godt utgangspunkt hvis du kommer i gang med datavitenskap og trenger en innledende matematisk oversikt over disse komponentene og hvordan vi kan leke med dem ved å bruke NumPy i kode.

NumPy -biblioteket lar oss utføre forskjellige operasjoner som må utføres på datastrukturer som ofte brukes i maskinlæring og datavitenskap, som vektorer, matriser og matriser. Vi vil bare vise de vanligste operasjonene med NumPy som brukes i mange maskinlæringsrørledninger. Til slutt, vær oppmerksom på at NumPy bare er en måte å utføre operasjonene på, så de matematiske operasjonene vi viser er hovedfokuset for denne leksjonen og ikke selve NumPy -pakken. La oss komme i gang.







Hva er en vektor?

Ifølge Google er en vektor en størrelse som har retning så vel som størrelse, spesielt for å bestemme posisjonen til ett punkt i rommet i forhold til et annet.





Vektorer er veldig viktige i maskinlæring da de ikke bare beskriver størrelsen, men også retningen til funksjonene. Vi kan lage en vektor i NumPy med følgende kodebit:





import numpysomf.eks

row_vector = np.array([1,2,3])
skrive ut(rad_vektor)

I kodebiten ovenfor opprettet vi en radvektor. Vi kan også lage en kolonnevektor som:

import numpysomf.eks

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

Å lage en matrise

En matrise kan ganske enkelt forstås som en todimensjonal matrise. Vi kan lage en matrise med NumPy ved å lage en flerdimensjonal matrise:



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

Selv om matrisen er nøyaktig lik den flerdimensjonale matrisen, matrisedatastrukturen anbefales ikke av to årsaker:

  1. Arrayen er standarden når det gjelder NumPy -pakken
  2. De fleste operasjonene med NumPy returnerer matriser og ikke en matrise

Bruke en sparsom matrise

For å minne om det er en sparsom matrise den der de fleste elementene er null. Et vanlig scenario innen databehandling og maskinlæring er å behandle matriser der de fleste elementene er null. Vurder for eksempel en matrise hvis rader beskriver hver video på Youtube, og kolonner representerer hver registrert bruker. Hver verdi representerer om brukeren har sett en video eller ikke. Selvfølgelig vil flertallet av verdiene i denne matrisen være null. De fordel med sparsom matrise er at den ikke lagrer verdiene som er null. Dette resulterer i en stor beregningsfordel og lagringsoptimalisering også.

La oss lage en gnistmatrise her:

fra sparsom import sparsom

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

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

I koden ovenfor brukte vi en NumPys funksjon for å lage en Komprimert sparsom rad matrise der ikke-null elementer er representert ved hjelp av de nullbaserte indeksene. Det finnes forskjellige typer sparsom matrise, som:

  • Komprimert sparsom kolonne
  • Liste over lister
  • Ordbok med nøkler

Vi kommer ikke til å dykke ned i andre sparsomme matriser her, men vet at hver bruk er spesifikk og ingen kan betegnes som 'best'.

Bruke operasjoner på alle vektorelementer

Det er et vanlig scenario når vi må bruke en felles operasjon på flere vektorelementer. Dette kan gjøres ved å definere en lambda og deretter vektorisere den samme. La oss se en kodebit for det samme:

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

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

vektorisert_mul_5(matrise)

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

I kodebiten ovenfor brukte vi vektoriseringsfunksjon som er en del av NumPy -biblioteket, for å transformere en enkel lambda -definisjon til en funksjon som kan behandle hvert element i vektoren. Det er viktig å merke seg at vektorisering er bare en sløyfe over elementene og det har ingen effekt på programmets ytelse. NumPy tillater også kringkasting , som betyr at vi i stedet for den ovennevnte komplekse koden ganske enkelt kunne ha gjort:

matrise* 5

Og resultatet ville blitt nøyaktig det samme. Jeg ville først vise den komplekse delen, ellers hadde du hoppet over delen!

Gjennomsnitt, varians og standardavvik

Med NumPy er det enkelt å utføre operasjoner knyttet til beskrivende statistikk over vektorer. Middel av en vektor kan beregnes som:

np. middel(matrise)

Variasjon av en vektor kan beregnes som:

np.var(matrise)

Standardavvik for en vektor kan beregnes som:

f.eks std(matrise)

Utdataene fra kommandoene ovenfor på den gitte matrisen er gitt her:

Transponere en matrise

Transponering er en veldig vanlig operasjon som du vil høre om når du er omgitt av matriser. Transponering er bare en måte å bytte kolonne- og radverdier i en matrise. Vær oppmerksom på at a vektoren kan ikke transponeres som en vektor er bare en samling verdier uten at disse verdiene er kategorisert i rader og kolonner. Vær oppmerksom på at konvertering av en radvektor til en kolonnevektor ikke transponerer (basert på definisjonene av lineær algebra, som ligger utenfor omfanget av denne leksjonen).

Foreløpig finner vi fred bare ved å transponere en matrise. Det er veldig enkelt å få tilgang til transponering av en matrise med NumPy:

matrise.T

Utdataene fra kommandoen ovenfor på den gitte matrisen er gitt her:

Samme operasjon kan utføres på en radvektor for å konvertere den til en kolonnevektor.

Utflating av en matrise

Vi kan konvertere en matrise til en endimensjonal matrise hvis vi ønsker å behandle elementene på en lineær måte. Dette kan gjøres med følgende kodebit:

matrise. flate()

Utdataene fra kommandoen ovenfor på den gitte matrisen er gitt her:

Vær oppmerksom på at flatmatrisen er en endimensjonal matrise, rett og slett lineær.

Beregning av Eigenverdier og Eigenvektorer

Eigenvektorer brukes veldig ofte i maskinlæringspakker. Så når en lineær transformasjonsfunksjon presenteres som en matrise, så er X, Eigenvektorer vektorene som bare endrer seg i vektoren, men ikke dens retning. Vi kan si at:

Xv = γv

Her er X kvadratmatrisen og γ inneholder Eigen -verdiene. V inneholder også Eigenvektorene. Med NumPy er det enkelt å beregne Eigenvalues ​​og Eigenvectors. Her er kodebiten der vi demonstrerer det samme:

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

Utdataene fra kommandoen ovenfor på den gitte matrisen er gitt her:

Dot -produkter av vektorer

Dot Products of Vectors er en måte å multiplisere 2 vektorer. Det forteller deg om hvor mye av vektorene er i samme retning , i motsetning til kryssproduktet som forteller deg det motsatte, hvor lite vektorer er i samme retning (kalt ortogonal). Vi kan beregne prikkproduktet til to vektorer som gitt i kodebiten her:

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

np.dot(a, b)

Utdataene fra kommandoen ovenfor på de gitte oppstillingene er gitt her:

Legge til, trekke fra og multiplisere matriser

Å legge til og trekke fra flere matriser er en ganske enkel operasjon i matriser. Det er to måter dette kan gjøres på. La oss se på kodebiten for å utføre disse operasjonene. For å holde dette enkelt, vil vi bruke den samme matrisen to ganger:

np. legge til(matrise, matrise)

Deretter kan to matriser trekkes fra som:

np. trekke fra(matrise, matrise)

Utdataene fra kommandoen ovenfor på den gitte matrisen er gitt her:

Som forventet blir hvert av elementene i matrisen lagt/trukket med det tilsvarende elementet. Å multiplisere en matrise ligner på å finne prikkproduktet som vi gjorde tidligere:

np.dot(matrise, matrise)

Koden ovenfor finner den sanne multiplikasjonsverdien til to matriser, gitt som:

matrise*matrise

Utdataene fra kommandoen ovenfor på den gitte matrisen er gitt her:

Konklusjon

I denne leksjonen har vi gjennomgått mange matematiske operasjoner relatert til vektorer, matriser og matriser som ofte brukes Databehandling, beskrivende statistikk og datavitenskap. Dette var en rask leksjon som bare dekket de mest vanlige og viktigste delene av det store konseptet, men disse operasjonene burde gi en veldig god ide om hva alle operasjoner kan utføres mens du håndterer disse datastrukturer.

Del gjerne tilbakemeldingen din om timen på Twitter med @linuxhint og @sbmaggarwal (det er meg!).