Python -vektorer, matriser og matriser med numpy

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

Numpy Library lar oss utføre forskjellige operasjoner som må gjø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 i denne leksjonen og ikke selve Numpy -pakken. La oss komme i gang.

Hva er en vektor?

I følge Google er en vektor en mengde som har retning og størrelse, spesielt som å bestemme plasseringen av ett punkt i rom i forhold til et annet.

Vektorer er veldig viktige i maskinlæring, da de ikke bare beskriver størrelsesorden, men også funksjonens retning. Vi kan opprette en vektor i Numpy med følgende kodebit:

Importer numpy som NP
ROW_VECTOR = NP.Array ([1,2,3])
Print (ROW_VECTOR)

I ovennevnte kodebit opprettet vi en radvektor. Vi kan også lage en kolonnevektor som:

Importer numpy som NP
Col_Vector = NP.Array ([[1], [2], [3]])
Print (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 multimensjonal matrise:

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

Selv om Matrix er nøyaktig lik flerdimensjonal matrise, Matrix -datastrukturen anbefales ikke På grunn av to grunner:

  1. Arrayen er standarden når det gjelder Numpy -pakken
  2. De fleste av operasjonene med numpy retur -matriser og ikke en matrise

Ved hjelp av en sparsom matrise

For å minne, er en sparsom matrise den der de fleste av varene er null. Nå behandler et vanlig scenario innen databehandling og maskinlæring matriser der de fleste av elementene er null. Tenk for eksempel på en matrise hvis rader beskriver hver video på YouTube og kolonner representerer hver registrerte bruker. Hver verdi representerer hvis 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 også i en enorm beregningsfordel og lagringsoptimalisering.

La oss lage en Spark Matrix 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)
Print (sparse_matrix)

For å forstå hvordan koden fungerer, vil vi se på utdataene her:

I koden ovenfor brukte vi en numpys funksjon for å lage en Komprimert sparsom rad matrise hvor ikke-null elementer er representert ved hjelp av nullbaserte indekser. Det er forskjellige typer sparsom matrise, som:

  • Komprimert sparsom kolonne
  • Liste over lister
  • Dictionary of Keys

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

Bruke operasjoner på alle vektorelementer

Det er et vanlig scenario når vi trenger å bruke en vanlig operasjon på flere vektorelementer. Dette kan gjøres ved å definere en lambda og deretter vektorisere det samme. La oss se noen 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)
Vectorized_mul_5 (Matrix)

For å forstå hvordan koden fungerer, vil vi se på utdataene her:

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

Matrix * 5

Og resultatet ville vært nøyaktig det samme. Jeg ønsket å vise den komplekse delen først, ellers ville du hoppet over seksjonen!

Mener, varians og standardavvik

Med Numpy er det enkelt å utføre operasjoner relatert til beskrivende statistikk over vektorer. Gjennomsnitt av en vektor kan beregnes som:

np.Gjennomsnitt (matrise)

Varians av en vektor kan beregnes som:

np.var (matrise)

Standardavvik for en vektor kan beregnes som:

np.STD (Matrix)

Utgangen fra ovennevnte kommandoer 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 for en matrise. Vær oppmerksom på at a vektor kan ikke transponeres Som vektor er bare en samling av verdier uten at verdiene blir 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 er utenfor omfanget av denne leksjonen).

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

matrise.T

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

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

Flat 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.flat ()

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

Merk at flatmatrisen er en endimensjonal matrise, ganske enkelt lineær på moten.

Beregning av egenverdier og egenvektorer

Eigenvektorer brukes veldig ofte i maskinlæringspakker. Så når en lineær transformasjonsfunksjon blir presentert som en matrise, er x, egenvektorer vektorene som bare endres i skalaen til vektoren, men ikke dens retning. Vi kan si det:

XV = γV

Her er x den firkantede matrisen og γ inneholder egenverdiene. Også v inneholder egenvektorene. Med Numpy er det enkelt å beregne egenverdier og egenvektorer. Her er kodebiten der vi demonstrerer det samme:

evaluer, evektorer = np.Lining.eig (matrise)

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

Prikkprodukter av vektorer

Prikkprodukter av vektorer 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 vektorene er i samme retning (kalt ortogonal). Vi kan beregne prikkproduktet av to vektorer som gitt i kodebiten her:

a = np.Array ([3, 5, 6])
B = NP.Array ([23, 15, 1])
np.prikk (a, b)

Utgangen fra kommandoen ovenfor på de gitte matriser er gitt her:

Legge til, trekke og multiplisere matriser

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

np.Legg til (matrise, matrise)

Deretter kan to matriser trekkes fra som:

np.trekke fra (matrise, matrise)

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

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

np.Dot (Matrix, Matrix)

Ovennevnte kode vil finne den sanne multiplikasjonsverdien til to matriser, gitt som:

Matrix * Matrix

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

Konklusjon

I denne leksjonen gikk vi gjennom mange matematiske operasjoner relatert til vektorer, matriser og matriser som ofte er brukt databehandling, beskrivende statistikk og datavitenskap. Dette var en rask leksjon som bare dekket de vanligste og viktigste delene av det store utvalget av konsepter, men disse operasjonene bør gi en veldig god ide om hva alle operasjoner kan utføres mens du håndterer disse datastrukturene.

Vennligst del tilbakemeldingene dine fritt om leksjonen på Twitter med @linuxhint og @sbmaggarwal (det er meg!).