Python: vektorji, matrike in nizi z NumPy

Python Vectors Matrices



V tej lekciji si bomo ogledali nekaj čednih namigov in trikov za igranje z vektorji, matrikami in matrikami z uporabo knjižnice NumPy v Pythonu. Ta lekcija je zelo dobro izhodišče, če se začenjate ukvarjati s podatkovno znanostjo in potrebujete uvodni matematični pregled teh komponent in kako se lahko z njimi igramo z uporabo NumPyja v kodi.

Knjižnica NumPy nam omogoča izvajanje različnih operacij, ki jih je treba izvesti na podatkovnih strukturah, ki se pogosto uporabljajo v strojnem učenju in podatkovni znanosti, kot so vektorji, matrike in matrike. Prikazali bomo le najpogostejše operacije z NumPy, ki se uporabljajo v številnih cevovodih strojnega učenja. Na koncu upoštevajte, da je NumPy le način za izvajanje operacij, zato so matematične operacije, ki jih prikažemo, glavni poudarek te lekcije in ne sam paket NumPy. Začnimo.







Kaj je vektor?

Po Googlu je vektor količina, ki ima smer in velikost, zlasti pri določanju položaja ene točke v prostoru glede na drugo.





Vektorji so pri strojnem učenju zelo pomembni, saj ne opisujejo le velikosti, temveč tudi smer funkcij. V NumPyju lahko ustvarimo vektor z naslednjim odrezkom kode:





uvoz numpykotnpr

row_vector = np.masa([1,2,3])
tiskanje(row_vector)

V zgornjem delčku kode smo ustvarili vektor vrstice. Vektor stolpca lahko ustvarimo tudi kot:

uvoz numpykotnpr

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

Izdelava matrice

Matriko lahko preprosto razumemo kot dvodimenzionalno matriko. Matriko z NumPy lahko naredimo tako, da naredimo večdimenzionalno matriko:



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

Čeprav je matrika popolnoma podobna večdimenzionalni matriki, matrična struktura podatkov ni priporočljiva iz dveh razlogov:

  1. Niz je standard, ko gre za paket NumPy
  2. Večina operacij z NumPy vrne matrike in ne matrike

Uporaba redke matrice

Naj spomnim, da je redka matrika tista, pri kateri je večina postavk nič. Zdaj je pogost scenarij pri obdelavi podatkov in strojnem učenju obdelava matrik, v katerih je večina elementov nič. Na primer, razmislite o matriki, katere vrstice opisujejo vsak videoposnetek na Youtube, stolpci pa predstavljajo vsakega registriranega uporabnika. Vsaka vrednost predstavlja, ali si je uporabnik ogledal videoposnetek ali ne. Seveda bo večina vrednosti v tej matrici nič. The prednost z redko matrico je, da ne shranjuje vrednosti, ki so nič. To ima za posledico veliko računsko prednost in optimizacijo shranjevanja.

Ustvarimo matriko isker tukaj:

iz scipy uvoz redko

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

Če želite razumeti, kako deluje koda, si oglejte izhod tukaj:

V zgornji kodi smo za ustvarjanje datoteke uporabili funkcijo NumPy Stisnjena redka vrsta matriko, kjer so elementi brez nič predstavljeni z uporabo indeksov, ki temeljijo na ničelni vrednosti. Obstajajo različne vrste redkih matrik, na primer:

  • Stisnjen redek steber
  • Seznam seznamov
  • Slovar ključev

Tu se ne bomo poglabljali v druge redke matrice, vendar vedite, da je vsaka njihova uporaba specifična in nihče ne more biti označen kot 'najboljši'.

Uporaba operacij za vse vektorske elemente

To je pogost scenarij, ko moramo uporabiti skupno operacijo za več vektorskih elementov. To lahko naredimo tako, da definiramo lambda in nato isto vektoriziramo. Oglejmo si delček kode za isto:

matrika = np. matrika([
[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(matrika)

Če želite razumeti, kako deluje koda, si oglejte izhod tukaj:

V zgornjem odrezku kode smo uporabili funkcijo vektorja, ki je del knjižnice NumPy, za pretvorbo preproste lambda definicije v funkcijo, ki lahko obdeluje vsak element vektorja. Pomembno je omeniti, da je vektorizacija samo zanka nad elementi in nima vpliva na uspešnost programa. NumPy omogoča tudi oddajanje , kar pomeni, da bi namesto zgornje zapletene kode lahko preprosto naredili:

matrika* 5

In rezultat bi bil popolnoma enak. Želel sem najprej pokazati zapleten del, sicer bi preskočili razdelek!

Povprečje, variacija in standardni odklon

Z NumPy je enostavno izvajati operacije, povezane z opisno statistiko vektorjev. Povprečje vektorja je mogoče izračunati kot:

np.pomeni(matrika)

Odmik vektorja je mogoče izračunati kot:

np.var(matrika)

Standardni odklon vektorja se lahko izračuna kot:

npr(matrika)

Izhod zgornjih ukazov na dani matrici je podan tukaj:

Prenos matrice

Transponiranje je zelo pogosta operacija, o kateri boste slišali, kadar koli ste obkroženi z matrikami. Prenos je le način za zamenjavo stolpcev in vrstic vrednosti matrike. Upoštevajte, da a vektorja ni mogoče prenesti saj je vektor le zbir vrednosti, ne da bi bile te vrednosti razvrščene v vrstice in stolpce. Upoštevajte, da pretvorba vektorja vrstice v vektor stolpca ni prenos (na podlagi definicij linearne algebre, ki je izven področja te lekcije).

Za zdaj bomo mir našli le s prenosom matrike. Dostop do prenosa matrike z NumPy je zelo preprost:

matrika.T

Izhod zgornjega ukaza na dani matrici je podan tukaj:

Enako operacijo lahko izvedete pri vektorju vrstice, da ga pretvorite v vektor stolpca.

Poravnavanje matrice

Matriko lahko pretvorimo v enodimenzionalno matriko, če želimo njene elemente obdelati linearno. To lahko storite z naslednjim delčkom kode:

matrica.splošči()

Izhod zgornjega ukaza na dani matrici je podan tukaj:

Upoštevajte, da je sploščena matrika enodimenzionalna matrika, preprosto linearna.

Izračun lastnih vrednosti in lastnih vektorjev

Lastni vektorji se zelo pogosto uporabljajo v paketih strojnega učenja. Ko je torej funkcija linearne transformacije predstavljena kot matrika, so lastni vektorji X vektorji, ki se spreminjajo le v merilu vektorja, ne pa tudi njegove smeri. Lahko rečemo, da:

Xv = γv

Tu je X kvadratna matrika in γ vsebuje lastne vrednosti. V vsebuje tudi lastne vektorje. Z NumPy je enostavno izračunati lastne vrednosti in lastne vektorje. Tu je delček kode, kjer dokazujemo isto:

ocenjuje, evektorji = np.linalg.eig(matrika)

Izhod zgornjega ukaza na dani matrici je podan tukaj:

Dot izdelki vektorjev

Dot Products of Vectors je način množenja 2 vektorjev. Pove vam o koliko vektorjev je v isti smeri v nasprotju z navzkrižnim produktom, ki vam pove nasprotno, kako majhni so vektorji v isti smeri (imenovani ortogonalni). Dot produkt dveh vektorjev lahko izračunamo, kot je podano v delčku kode tukaj:

a = np. matrika([3,5,6])
b = np. matrika([2. 3,petnajst,1])

np.dot(a, b)

Izhod zgornjega ukaza za dane matrike je podan tukaj:

Dodajanje, odštevanje in množenje matrik

Dodajanje in odštevanje več matrik je v matrikah precej preprosto delovanje. To lahko storite na dva načina. Poglejmo delček kode za izvajanje teh operacij. Za ohranitev te enostavnosti bomo dvakrat uporabili isto matrico:

np.dodaj(matrica, matrika)

Nato lahko dve matrici odštejemo kot:

np.odšteti(matrica, matrika)

Izhod zgornjega ukaza na dani matrici je podan tukaj:

Kot je bilo pričakovano, se vsak element v matrici sešteje/odšteje z ustreznim elementom. Pomnoževanje matrike je podobno iskanju pikčastega produkta, kot smo to storili prej:

np.dot(matrica, matrika)

Zgornja koda bo našla pravo vrednost množenja dveh matrik, podano kot:

matrika*matrika

Izhod zgornjega ukaza na dani matrici je podan tukaj:

Zaključek

V tej lekciji smo šli skozi številne matematične operacije, povezane z vektorji, matrikami in nizi, ki se običajno uporabljajo za obdelavo podatkov, opisno statistiko in podatkovno znanost. To je bila hitra lekcija, ki je zajemala le najpogostejše in najpomembnejše odseke najrazličnejših konceptov, vendar bi morale te operacije dati zelo dobro predstavo o tem, kaj vse je mogoče izvesti pri obravnavi teh podatkovnih struktur.

Prosimo, da svoje povratne informacije o lekciji na Twitterju delite brezplačno @linuxhint in @sbmaggarwal (to sem jaz!).