Python: vektorid, maatriksid ja massiivid koos NumPy -ga

Python Vectors Matrices



Selles õppetükis vaatame mõningaid näpunäiteid vektorite, maatriksite ja massiividega mängimiseks, kasutades Pythonis NumPy raamatukogu. See õppetund on väga hea lähtepunkt, kui olete andmeteadusega alustamas ja vajate sissejuhatavat matemaatilist ülevaadet nendest komponentidest ja sellest, kuidas saame nendega mängida, kasutades NumPy koodi.

NumPy raamatukogu võimaldab meil teha mitmesuguseid toiminguid, mida tuleb teha masinõppes ja andmeteaduses sageli kasutatavate andmestruktuuridega, nagu vektorid, maatriksid ja massiivid. Näitame ainult kõige tavalisemaid NumPy toiminguid, mida kasutatakse paljudes masinõppe konveierites. Lõpuks pange tähele, et NumPy on lihtsalt viis toimingute tegemiseks, seega on selle õppetunni põhirõhk meie näidatud matemaatilistel toimingutel, mitte NumPy pakett ise. Alustame.





Mis on vektor?

Google'i sõnul on vektor suurus, millel on nii suund kui ka suurusjärk, eriti kui määratakse ruumi ühe punkti asukoht teise suhtes.





Vektorid on masinõppes väga olulised, kuna need ei kirjelda mitte ainult funktsioonide suurust, vaid ka suunda. NumPy -s saame luua vektori järgmise koodilõigu abil:





import numpynagunt

rea_vektor = np.massiiv([1,2,3])
printida(rida_vektor)

Ülaltoodud koodilõigus lõime reavektori. Samuti saame luua veeruvektori järgmiselt:

import numpynagunt

col_vector = np.massiiv([[1],[2],[3]])
printida(col_vector)

Maatriksi tegemine

Maatriksit võib lihtsalt mõista kahemõõtmelise massiivina. Me saame maatriksi teha NumPy abil, tehes mitmemõõtmelise massiivi:



maatriks = np.massiiv([[1,2,3],[4,5,6],[7,8,9]])
printida(maatriks)

Kuigi maatriks on täpselt sarnane mitmemõõtmelisele massiivile, maatriksi andmestruktuuri ei soovitata kahel põhjusel:

  1. Massiiv on NumPy paketi standard
  2. Enamik NumPy toiminguid tagastab massiivid, mitte maatriksi

Kasutades hõredat maatriksit

Tuletame meelde, et hõre maatriks on see, kus enamik üksusi on null. Nüüd on andmetöötluse ja masinõppe tavaline stsenaarium maatriksite töötlemine, milles enamik elemente on null. Näiteks kaaluge maatriksit, mille read kirjeldavad kõiki Youtube'i videoid ja veerud tähistavad iga registreeritud kasutajat. Iga väärtus näitab, kas kasutaja on videot vaadanud või mitte. Loomulikult on enamus selle maatriksi väärtustest null. The eelis hõreda maatriksiga see ei salvesta nullväärtusi. Selle tulemuseks on tohutu arvutuslik eelis ja ka salvestusruumi optimeerimine.

Loome siin sädemaatriksi:

alates scipy import hõre

originaal_maatriks = np.massiiv([[1,0,3],[0,0,6],[7,0,0]])
hõre_maatriks = hõre.csr_maatriks(originaal_maatriks)
printida(hõre_maatriks)

Koodi toimimise mõistmiseks vaatame väljundit siin:

Ülaltoodud koodis kasutasime a loomiseks NumPy funktsiooni Tihendatud hõre rida maatriks, kus nullist erinevaid elemente kasutatakse nullipõhiste indeksite abil. Hõredat maatriksit on erinevaid, näiteks:

  • Kokkusurutud hõre veerg
  • Nimekirjade loend
  • Võtmete sõnastik

Me ei hakka siin teistesse hõredatesse maatriksitesse sukelduma, kuid teame, et nende iga kasutusala on spetsiifiline ja kedagi ei saa nimetada parimaks.

Toimingute rakendamine kõigile vektori elementidele

See on tavaline stsenaarium, kui peame rakendama ühist toimingut mitmele vektori elemendile. Seda saab teha lambda määratlemise ja sama vektoriseerimisega. Vaatame sama koodilõiku:

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

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

vektoriseeritud_mul_5(maatriks)

Koodi toimimise mõistmiseks vaatame väljundit siin:

Ülaltoodud koodilõigus kasutasime funktsiooni vektoriseerimine, mis on osa NumPy raamatukogust, et muuta lihtne lambda definitsioon funktsiooniks, mis suudab töödelda vektori iga elementi. Oluline on märkida, et vektoriseerimine on lihtsalt silmus elementide kohal ja see ei mõjuta programmi jõudlust. NumPy lubab ka ringhääling , mis tähendab, et ülaltoodud keerulise koodi asemel oleksime võinud lihtsalt teha järgmist:

maatriks* 5

Ja tulemus oleks olnud täpselt sama. Tahtsin kõigepealt näidata keerulist osa, muidu oleksite selle osa vahele jätnud!

Keskmine, dispersioon ja standardhälve

NumPy abil on lihtne teha vektorite kirjeldava statistikaga seotud toiminguid. Vektori keskmist saab arvutada järgmiselt:

np. tähendab(maatriks)

Vektori dispersiooni saab arvutada järgmiselt:

np.var(maatriks)

Vektori standardhälbe saab arvutada järgmiselt:

nt std(maatriks)

Ülaltoodud käskude väljund antud maatriksil on toodud siin:

Maatriksi ülevõtmine

Ülevõtmine on väga tavaline toiming, millest kuulete alati, kui teid ümbritsevad maatriksid. Ülevõtmine on vaid üks viis maatriksi veergude ja ridade väärtuste vahetamiseks. Pange tähele, et a vektorit ei saa üle kanda kui vektor on lihtsalt väärtuste kogum, ilma et neid väärtusi liigitataks ridadesse ja veergudesse. Pange tähele, et reavektori teisendamine veeruvektoriks ei ole ülevõtmine (põhineb lineaarse algebra määratlustel, mis jäävad selle õppetunni raamest välja).

Praegu leiame rahu ainult maatriksi ülevõtmisega. NumPy abil on maatriksi ülevõtmisele juurdepääs väga lihtne:

maatriks.T

Ülaltoodud käsu väljund antud maatriksil on toodud siin:

Sama toimingu saab teha ka reavektoriga, et teisendada see veeruvektoriks.

Maatriksi tasandamine

Kui soovime selle elemente lineaarselt töödelda, saame maatriksi muuta ühemõõtmeliseks massiiviks. Seda saab teha järgmise koodilõigu abil:

maatriks.lame()

Ülaltoodud käsu väljund antud maatriksil on toodud siin:

Pange tähele, et lamendusmaatriks on ühemõõtmeline massiiv, mis on lihtsalt lineaarne.

Omaväärtuste ja omavektorite arvutamine

Masinõppe pakettides kasutatakse väga sageli omavektoreid. Niisiis, kui maatriksina esitatakse lineaarne teisendusfunktsioon, siis X, ei -vektorid on vektorid, mis muutuvad ainult vektori skaalal, kuid mitte selle suunda. Võime öelda, et:

Xv = γv

Siin on X ruudukujuline maatriks ja γ sisaldab omaväärtusi. Samuti sisaldab v omavektorit. NumPy abil on lihtne arvutada oma- ja omavektorid. Siin on koodilõik, kus demonstreerime sama:

väärtused, evektorid = np.linalg.eig(maatriks)

Ülaltoodud käsu väljund antud maatriksil on toodud siin:

Vektorite punkttooted

Vektorite punkttooted on viis kahe vektori korrutamiseks. See räägib teile kui palju vektoreid on samas suunas , erinevalt ristproduktist, mis ütleb teile vastupidist, kui vähe on vektoreid samas suunas (nimetatakse ortogonaalseteks). Me saame arvutada kahe vektori punkttoote, nagu on näidatud siinkohal:

a = np. massiiv([3,5,6])
b = np. massiiv([2. 3,viisteist,1])

np.punkt(a, b)

Siin on toodud ülaltoodud käsu väljund antud massiividel:

Maatriksite liitmine, lahutamine ja korrutamine

Mitme maatriksi lisamine ja lahutamine on maatriksites üsna lihtne toiming. Seda saab teha kahel viisil. Vaatame nende toimingute tegemiseks koodilõiku. Selle lihtsuse tagamiseks kasutame sama maatriksit kaks korda:

np. lisage(maatriks, maatriks)

Järgmisena saab kaks maatriksit lahutada järgmiselt:

np. lahutada(maatriks, maatriks)

Ülaltoodud käsu väljund antud maatriksil on toodud siin:

Nagu oodatud, liidetakse/lahutatakse maatriksi kõik elemendid vastava elemendiga. Maatriksi korrutamine sarnaneb punkttoote leidmisega nagu varem:

np.punkt(maatriks, maatriks)

Ülaltoodud kood leiab kahe maatriksi tegeliku korrutamisväärtuse, mis on esitatud järgmiselt:

maatriks*maatriks

Ülaltoodud käsu väljund antud maatriksil on toodud siin:

Järeldus

Selles õppetükis läbisime palju vektorite, maatriksite ja massiividega seotud matemaatilisi toiminguid, mida tavaliselt kasutatakse Andmetöötlus, kirjeldav statistika ja andmeteadus. See oli kiire õppetund, mis hõlmas ainult kõige levinumaid ja kõige olulisemaid mõisteid erinevatest mõistetest, kuid need toimingud peaksid andma väga hea ettekujutuse sellest, mida kõiki nende andmestruktuuridega tegelemise ajal teha saab.

Palun jagage oma tagasisidet vabalt Twitteris õppetunni kohta @linuxhint ja @sbmaggarwal (see olen mina!).