Python: Vektori, matrice i nizovi s NumPy

Python Vectors Matrices



U ovoj lekciji ćemo pogledati neke zgodne savjete i trikove za igru ​​s vektorima, matricama i nizovima pomoću NumPy knjižnice u Pythonu. Ova lekcija je vrlo dobra polazna točka ako počinjete s Data Science -om i trebate uvodni matematički pregled ovih komponenti i kako se možemo igrati s njima koristeći NumPy u kodu.

Knjižnica NumPy omogućuje nam izvođenje različitih operacija koje je potrebno izvršiti na strukturama podataka koje se često koriste u strojnom učenju i znanosti o podacima, poput vektora, matrica i nizova. Prikazat ćemo samo najčešće operacije s NumPy -om koje se koriste u mnogim cjevovodima strojnog učenja. Na kraju, imajte na umu da je NumPy samo način izvođenja operacija, pa su matematičke operacije koje prikazujemo glavni fokus ove lekcije, a ne sam paket NumPy. Započnimo.







Što je vektor?

Prema Google -u, vektor je veličina koja ima smjer, ali i veličinu, osobito za određivanje položaja jedne točke u prostoru u odnosu na drugu.





Vektori su vrlo važni u strojnom učenju jer ne opisuju samo veličinu, već i smjer značajki. Možemo stvoriti vektor u NumPy -u sa sljedećim isječkom koda:





uvoz numpykaonpr

row_vector = np.mat([1,2,3])
ispisati(red_vektor)

U gornjem isječku koda stvorili smo vektor retka. Također možemo stvoriti vektor stupca kao:

uvoz numpykaonpr

col_vector = np.mat([[1],[2],[3]])
ispisati(col_vector)

Izrada matrice

Matrica se može jednostavno shvatiti kao dvodimenzionalni niz. Pomoću NumPy-a možemo napraviti matricu tako što ćemo napraviti višedimenzionalni niz:



matrica = np.mat([[1,2,3],[4,5,6],[7,8,9]])
ispisati(matrica)

Iako je matrica potpuno slična višedimenzionalnom nizu, matrična struktura podataka se ne preporučuje iz dva razloga:

  1. Niz je standard kada je u pitanju paket NumPy
  2. Većina operacija s NumPy vraća nizove, a ne matricu

Korištenje rijetke matrice

Da podsjetimo, rijetka matrica je ona u kojoj je većina stavki nula. Sada je uobičajen scenarij u obradi podataka i strojnom učenju obrada matrica u kojima je većina elemenata nula. Na primjer, razmislite o matrici čiji redovi opisuju svaki videozapis na Youtubeu, a stupci predstavljaju svakog registriranog korisnika. Svaka vrijednost predstavlja je li korisnik gledao video ili nije. Naravno, većina vrijednosti u ovoj matrici bit će nula. The prednost s rijetkom matricom je da ne pohranjuje vrijednosti koje su nule. To rezultira velikom računalnom prednošću i optimizacijom pohrane.

Stvorimo matricu iskre ovdje:

od scipy uvoz rijetko

izvorna_matrica = np.mat([[1,0,3],[0,0,6],[7,0,0]])
sparse_matrix = rijetka.csr_matrix(izvorna_matrica)
ispisati(rijetka_matrica)

Da bismo razumjeli kako kod funkcionira, ovdje ćemo pogledati izlaz:

U gornjem kodu koristili smo funkciju NumPy za stvaranje Komprimirani rijetki red matrica u kojoj su elementi različiti od nule prikazani pomoću indeksa temeljenih na nuli. Postoje različite vrste rijetke matrice, poput:

  • Komprimirani rijetki stup
  • Popis popisa
  • Rječnik ključeva

Ovdje nećemo zalaziti u druge rijetke matrice, ali znajte da je svaka njihova upotreba specifična i nitko se ne može nazvati 'najboljim'.

Primjena operacija na sve vektorske elemente

Uobičajen je scenarij kada moramo primijeniti zajedničku operaciju na više vektorskih elemenata. To se može učiniti definiranjem lambda i zatim vektorizacijom iste. Pogledajmo isječak koda za isti:

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

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

vektoriziran_mul_5(matrica)

Da bismo razumjeli kako kod funkcionira, ovdje ćemo pogledati izlaz:

U gornjem isječku koda koristili smo funkciju vektoriranja koja je dio biblioteke NumPy, za transformaciju jednostavne lambda definicije u funkciju koja može obraditi svaki element vektora. Važno je napomenuti da je vektorizacija samo petlja nad elementima i nema utjecaja na izvedbu programa. NumPy također dopušta emitiranje , što znači da smo umjesto gornjeg složenog koda mogli jednostavno učiniti:

matrica* 5

A rezultat bi bio potpuno isti. Htio sam prvo pokazati složeni dio, inače biste preskočili odjeljak!

Srednja vrijednost, varijacija i standardna devijacija

Uz NumPy, lako je izvesti operacije povezane s opisnom statistikom o vektorima. Srednja vrijednost vektora može se izračunati na sljedeći način:

np.znači(matrica)

Varijanta vektora može se izračunati na sljedeći način:

np.var(matrica)

Standardna devijacija vektora može se izračunati kao:

npr. std(matrica)

Ovdje se nalazi izlaz gore navedenih naredbi na zadanoj matrici:

Transponiranje matrice

Transponiranje je vrlo česta operacija o kojoj ćete čuti kad god ste okruženi matricama. Transponiranje je samo način zamjene stupacnih i retkih vrijednosti matrice. Napominjemo da je a vektor se ne može transponirati jer je vektor samo zbir vrijednosti bez da su te vrijednosti kategorizirane u retke i stupce. Imajte na umu da pretvaranje vektora retka u vektor stupca nije transponiranje (na temelju definicija linearne algebre, što je izvan opsega ove lekcije).

Za sada ćemo mir pronaći samo transponiranjem matrice. Pristup transponiranju matrice s NumPy je vrlo jednostavan:

matrica.T

Ovdje se nalazi rezultat gornje naredbe na zadanoj matrici:

Ista se operacija može izvesti na vektoru retka kako bi se pretvorio u vektor stupca.

Izravnavanje matrice

Matricu možemo pretvoriti u jednodimenzionalni niz ako njene elemente želimo obraditi linearno. To se može učiniti pomoću sljedećeg isječka koda:

matrica.spljoštiti()

Ovdje se nalazi rezultat gornje naredbe na zadanoj matrici:

Imajte na umu da je spljoštena matrica jednodimenzionalni niz, jednostavno linearan.

Izračunavanje vlastitih vrijednosti i vlastitih vektora

Vlastiti vektori se vrlo često koriste u paketima za strojno učenje. Dakle, kada je funkcija linearne transformacije predstavljena kao matrica, tada su X, vlastiti vektori vektori koji se mijenjaju samo u mjerilu vektora, ali ne i u njegovu smjeru. Možemo reći da:

Xv = γv

Ovdje je X kvadratna matrica, a γ sadrži vlastite vrijednosti. Također, v sadrži vlastite vektore. Uz NumPy, lako je izračunati vlastite vrijednosti i vlastite vektore. Evo isječka koda gdje demonstriramo isto:

ocjenjuje, evectors = np.linalg.eig(matrica)

Ovdje se nalazi rezultat gornje naredbe na zadanoj matrici:

Točkasti proizvodi vektora

Točkasti proizvodi vektora način je množenja 2 vektora. Govori vam o koliko je vektora u istom smjeru , za razliku od umreženog proizvoda koji vam govori suprotno, koliko su mali vektori u istom smjeru (nazvani ortogonalni). Možemo izračunati točkasti proizvod dva vektora kako je dato u isječku koda ovdje:

a = np. niz([3,5,6])
b = np. niz([2. 3,petnaest,1])

np.točka(a, b)

Ovdje se nalazi rezultat gornje naredbe na danim nizovima:

Zbrajanje, oduzimanje i množenje matrica

Zbrajanje i oduzimanje više matrica prilično je jednostavna operacija u matricama. Postoje dva načina na koja se to može učiniti. Pogledajmo isječak koda za izvođenje ovih operacija. Kako bi ovo bilo jednostavno, dvaput ćemo koristiti istu matricu:

np.dodati(matrica, matrica)

Zatim se dvije matrice mogu oduzeti kao:

np.oduzimati(matrica, matrica)

Ovdje se nalazi rezultat gornje naredbe na zadanoj matrici:

Očekivano, svaki od elemenata u matrici se zbraja/oduzima s odgovarajućim elementom. Množenje matrice slično je pronalaženju točkastog proizvoda kao što smo to učinili ranije:

np.točka(matrica, matrica)

Gornji kôd će pronaći pravu vrijednost množenja dviju matrica, danu kao:

matrica*matrica

Ovdje se nalazi rezultat gornje naredbe na zadanoj matrici:

Zaključak

U ovoj lekciji prošli smo kroz mnoge matematičke operacije povezane s vektorima, matricama i nizovima koje se obično koriste za obradu podataka, opisnu statistiku i znanost o podacima. Ovo je bila kratka lekcija koja je pokrivala samo najčešće i najvažnije dijelove širokog spektra koncepata, ali bi te operacije trebale dati vrlo dobru predodžbu o tome koje se sve operacije mogu izvesti dok se radi s tim strukturama podataka.

Slobodno podijelite svoje povratne informacije o lekciji na Twitteru sa @linuxhint i @sbmaggarwal (to sam ja!).