Znanost o podacima

Python vektori, matrice i nizovi s NumPy

Python vektori, matrice i nizovi s NumPy
U ovoj ćemo lekciji pogledati neke lijepe savjete i trikove za igru ​​s vektorima, matricama i nizovima pomoću NumPy biblioteke u Pythonu. Ova je lekcija vrlo dobra polazna točka ako započinjete s Data Scienceom i trebate uvodni matematički pregled ovih komponenata i kako se možemo igrati s njima koristeći NumPy u kodu.

NumPy knjižnica omogućuje nam izvođenje različitih operacija koje je potrebno obaviti na podatkovnim strukturama koje se često koriste u strojnom učenju i znanosti o podacima, poput vektora, matrica i nizova. Prikazati ćemo samo najčešće operacije s NumPy-om koje se koriste u većini cjevovoda za strojno učenje. 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 NumPy paket. Započnimo.

Što je vektor?

Prema Googleu, Vector je veličina koja ima smjer i veličinu, posebno kao 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 NumPyu sa sljedećim isječkom koda:

uvoz numpy kao np
redak_vektor = np.niz ([1,2,3])
ispis (vector_vector)

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

uvoz numpy kao np
col_vector = np.niz ([[1], [2], [3]])
ispis (col_vector)

Izrada matrice

Matrica se jednostavno može shvatiti kao dvodimenzionalni niz. Možemo napraviti matricu s NumPyom izrađivanjem višedimenzionalnog niza:

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

Iako je matrica potpuno slična višedimenzionalnom nizu, ne preporučuje se matrična struktura podataka 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štenjem rijetke matrice

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

Stvorimo ovdje matricu iskrišta:

od scipy uvoza rijetko
izvorna_matrica = np.niz ([[1, 0, 3], [0, 0, 6], [7, 0, 0]])
rijetka_matrica = rijetka.csr_matrix (original_matrix)
ispis (rijetka_matrica)

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

U gornjem kodu koristili smo funkciju NumPy za stvaranje a Stlačeni rijetki red matrica gdje su elementi koji nisu nula predstavljeni pomoću indeksa temeljenih na nuli. Postoje razne vrste rijetke matrice, poput:

Ovdje nećemo zaranjati u druge rijetke matrice, ali znamo da je svaka njihova upotreba specifična i nikoga ne možemo nazvati „najboljim“.

Primjena operacija na sve elemente vektora

Uobičajeni je scenarij kada trebamo primijeniti zajedničku operaciju na više vektorskih elemenata. To se može učiniti definiranjem lambde i zatim vektoriziranjem iste. Pogledajmo isječak koda za isto:

matrica = np.niz ([
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
mul_5 = lambda x: x * 5
vektorizirani_mul_5 = np.vektorizirati (mul_5)
vektorizirani_mul_5 (matrica)

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

U gornjem isječku koda koristili smo funkciju vektorizacije koja je dio biblioteke NumPy, kako bismo transformirali jednostavnu lambda definiciju u funkciju koja može obraditi svaki element vektora. Važno je napomenuti da je vektorizacija samo petlja preko elemenata i nema utjecaja na izvedbu programa. NumPy također omogućuje emitiranje, što znači da smo umjesto gornjeg složenog koda mogli jednostavno učiniti:

matrica * 5

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

Prosjek, varijanca i standardno odstupanje

Pomoću NumPy-a lako je izvoditi operacije povezane s opisnom statistikom vektora. Srednja vrijednost vektora može se izračunati kao:

np.srednja vrijednost (matrica)

Varijansa vektora može se izračunati kao:

np.var (matrica)

Standardno odstupanje vektora može se izračunati kao:

np.std (matrica)

Izlaz gore navedenih naredbi na datoj matrici dat je ovdje:

Transponiranje matrice

Transponiranje je vrlo česta operacija o kojoj ćete čuti kad god ste okruženi matricama. Transponiranje je samo način zamjene vrijednosti stupca i reda matrice. Imajte na umu da a vektor se ne može transponirati kao što je vektor samo skup 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 dosega ove lekcije).

Za sada ćemo mir pronaći samo transponiranjem matrice. Vrlo je jednostavno pristupiti transponiranju matrice s NumPy:

matrica.T

Izlaz gornje naredbe na datoj matrici dat je ovdje:

Ista se operacija može izvesti na vektoru retka da bi se pretvorila u vektor stupca.

Izravnavanje matrice

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

matrica.izravnati ()

Izlaz gornje naredbe na datoj matrici dat je ovdje:

Imajte na umu da je izravnana matrica jednodimenzionalni niz, jednostavno linearne mode.

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 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. Pomoću NumPy lako je izračunati vlastite vrijednosti i vlastite vektore. Evo isječka koda gdje pokazujemo isto:

procjenjuje, evektori = np.linalg.eig (matrica)

Izlaz gornje naredbe na datoj matrici dat je ovdje:

Točkasti proizvodi vektora

Točkasti proizvodi vektora način je množenja 2 vektora. Govori vam o koliki je vektor u istom smjeru, za razliku od križnog umnoška koji vam govori suprotno, koliko su vektori u istom smjeru (nazvani pravokutni). Točkasti umnožak dva vektora možemo izračunati kako je dano ovdje u isječku koda:

a = np.niz ([3, 5, 6])
b = np.niz ([23, 15, 1])
np.točka (a, b)

Izlaz gornje naredbe na danim nizovima dat je ovdje:

Zbrajanje, oduzimanje i množenje matrica

Zbrajanje i oduzimanje višestrukih 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. U svrhu jednostavnosti, koristit ćemo istu matricu dva puta:

np.dodaj (matrica, matrica)

Dalje se dvije matrice mogu oduzeti kao:

np.oduzimati (matrica, matrica)

Izlaz gornje naredbe na datoj matrici dat je ovdje:

Kao što se i očekivalo, svaki od elemenata u matrici dodaje se / oduzima s odgovarajućim elementom. Množenje matrice slično je pronalaženju točkanog proizvoda kao što smo to činili ranije:

np.točka (matrica, matrica)

Gornji kod pronaći će stvarnu vrijednost množenja dviju matrica, datu kao:

matrica * matrica

Izlaz gornje naredbe na datoj matrici dat je ovdje:

Zaključak

U ovoj smo lekciji prošli kroz puno matematičkih operacija povezanih s Vektorima, Matricama i Nizovima koji se često koriste Obrada podataka, deskriptivna statistika i znanost o podacima. Ovo je bila kratka lekcija koja je pokrivala samo najčešće i najvažnije odjeljke najrazličitijih koncepata, ali ove bi operacije trebale dati vrlo dobru predodžbu o tome koje se sve operacije mogu izvoditi tijekom rada s tim strukturama podataka.

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

SuperTuxKart za Linux
SuperTuxKart sjajan je naslov osmišljen kako bi vam besplatno pružio iskustvo Mario Kart na vašem Linux sustavu. Prilično je izazovno i zabavno igrati...
Vodič za bitku za Wesnoth
Bitka za Wesnoth jedna je od najpopularnijih strateških igara otvorenog koda koje trenutno možete igrati. Ne samo da se ova igra razvija već jako dugo...
0 A.D. Vodič
Od mnogih strateških igara tamo, 0 A.D. uspijeva se istaknuti kao sveobuhvatan naslov i vrlo duboka, taktička igra unatoč tome što je otvoren izvor. R...