Python: Vektorit, matriisit ja taulukot NumPyn avulla

Python Vectors Matrices



Tässä oppitunnissa tarkastelemme joitain siistejä vinkkejä ja temppuja vektorien, matriisien ja matriisien pelaamiseen Pumhonin NumPy -kirjaston avulla. Tämä oppitunti on erittäin hyvä lähtökohta, jos olet aloittamassa datatieteen käyttöä ja tarvitset alustavaa matemaattista katsausta näistä komponenteista ja siitä, kuinka voimme pelata niiden kanssa käyttämällä NumPy -koodia.

NumPy -kirjaston avulla voimme suorittaa erilaisia ​​toimintoja, jotka on tehtävä tietorakenteille, joita usein käytetään koneoppimisessa ja tietotieteessä, kuten vektoreita, matriiseja ja matriiseja. Näytämme vain yleisimmät NumPy -toiminnot, joita käytetään monissa koneoppimisprofiileissa. Huomaa lopuksi, että NumPy on vain tapa suorittaa toiminnot, joten esillä olevat matemaattiset operaatiot ovat tämän oppitunnin pääpaino, eivät itse NumPy -paketti. Aloitetaan.







Mikä on vektori?

Googlen mukaan vektori on määrä, jolla on suunta ja suuruus, varsinkin kun määritetään yhden avaruuden pisteen sijainti suhteessa toiseen.





Vektorit ovat erittäin tärkeitä koneoppimisessa, koska ne kuvaavat paitsi ominaisuuksien suuruutta myös niiden suuntaa. Voimme luoda vektorin NumPyssa seuraavalla koodinpätkällä:





tuoda numpykutenesim

row_vector = np.array([1,2,3])
Tulosta(rivi_vektori)

Yllä olevassa koodikatkelmassa loimme rivivektorin. Voimme myös luoda sarakevektorin seuraavasti:

tuoda numpykutenesim

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

Matriisin tekeminen

Matriisi voidaan yksinkertaisesti ymmärtää kaksiulotteisena matriisina. Voimme tehdä matriisin NumPyn avulla tekemällä moniulotteisen taulukon:



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

Vaikka matriisi on täsmälleen samanlainen kuin moniulotteinen matriisi, matriisin tietorakennetta ei suositella kahdesta syystä:

  1. Taulukko on vakio NumPy -paketin osalta
  2. Suurin osa NumPy -toiminnoista palauttaa matriiseja eikä matriisia

Harvan matriisin käyttäminen

Muistuttaakseni harva matriisi on se, jossa suurin osa kohteista on nolla. Nyt yleinen skenaario tietojenkäsittelyssä ja koneoppimisessa on matriisien käsittely, jossa suurin osa elementeistä on nolla. Ajatellaan esimerkiksi matriisia, jonka rivit kuvaavat jokaista YouTube -videota ja sarakkeet edustavat jokaista rekisteröityä käyttäjää. Jokainen arvo ilmaisee, onko käyttäjä katsonut videon vai ei. Tietenkin suurin osa tämän matriisin arvoista on nolla. The harva matriisi että se ei tallenna nolla -arvoja. Tämä johtaa valtavaan laskennalliseen etuun ja tallennustilan optimointiin.

Luo kipinämatriisi tähän:

scipy -tuonnista harva

alkuperäinen_matriisi = np. matriisi([[1,0,3],[0,0,6],[7,0,0]])
sparse_matrix = sparse.csr_matrix(alkuperäinen_matriisi)
Tulosta(sparse_matrix)

Koodin toiminnan ymmärtämiseksi tarkastelemme tulosta täällä:

Yllä olevassa koodissa käytimme NumPyn toimintoa luodaksemme Pakattu harva rivi matriisi, jossa muut kuin nolla-elementit esitetään käyttämällä nollapohjaisia ​​indeksejä. Harvaa matriisia on erilaisia, kuten:

  • Pakattu harva sarake
  • Luettelo luetteloista
  • Avainten sanakirja

Emme aio sukeltaa muihin harvoihin matriiseihin täällä, mutta tiedämme, että jokainen niiden käyttö on spesifinen eikä ketään voida kutsua 'parhaaksi'.

Toimintojen soveltaminen kaikkiin vektorielementteihin

Se on yleinen skenaario, kun meidän on sovellettava yhteistä operaatiota useisiin vektorielementteihin. Tämä voidaan tehdä määrittelemällä lambda ja vektorisoimalla sama. Katsotaanpa jotain koodinpätkää samaan:

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

Koodin toiminnan ymmärtämiseksi tarkastelemme tulosta täällä:

Yllä olevassa koodinpätkässä käytimme vektorisointitoimintoa, joka on osa NumPy -kirjastoa, muuntamaan yksinkertaisen lambda -määritelmän funktioksi, joka voi käsitellä vektorin jokaisen elementin. On tärkeää huomata, että vektorisointi on vain silmukka elementtien yli eikä sillä ole vaikutusta ohjelman suorituskykyyn. NumPy sallii myös lähetys , mikä tarkoittaa, että yllä olevan monimutkaisen koodin sijasta olisimme voineet yksinkertaisesti tehdä:

matriisi* 5

Ja tulos olisi ollut täsmälleen sama. Halusin näyttää monimutkaisen osan ensin, muuten olisit ohittanut osion!

Keskiarvo, varianssit ja keskihajonta

NumPyn avulla on helppo suorittaa toimintoja, jotka liittyvät vektorien kuvaavaan tilastoon. Vektorin keskiarvo voidaan laskea seuraavasti:

np. tarkoittaa(matriisi)

Vektorin varianssi voidaan laskea seuraavasti:

np.var(matriisi)

Vektorin keskihajonta voidaan laskea seuraavasti:

esim. vakio(matriisi)

Yllä olevien komentojen tulos annetulla matriisilla annetaan tässä:

Matriisin transponointi

Transponointi on hyvin yleinen toimenpide, josta kuulet aina matriisien ympäröimänä. Transponointi on vain tapa vaihtaa matriisin sarake- ja riviarvoja. Huomaa, että a vektoria ei voi siirtää vektori on vain kokoelma arvoja ilman, että arvoja luokitellaan riveihin ja sarakkeisiin. Huomaa, että rivivektorin muuntaminen sarakevektoriksi ei ole transponointia (perustuu tämän oppitunnin ulkopuolelle jäävän lineaarisen algebran määritelmiin).

Toistaiseksi löydämme rauhan vain siirtämällä matriisin. Matriisin transponointi on erittäin helppoa NumPyn avulla:

matriisi.T

Yllä olevan komennon tulos annetulla matriisilla annetaan tässä:

Sama toiminto voidaan suorittaa rivivektorilla sen muuntamiseksi sarakevektoriksi.

Matriisin litistäminen

Voimme muuntaa matriisin yksiulotteiseksi matriisiksi, jos haluamme käsitellä sen elementtejä lineaarisesti. Tämä voidaan tehdä seuraavan koodinpätkän avulla:

matriisi.tasoittaa()

Yllä olevan komennon tulos annetulla matriisilla annetaan tässä:

Huomaa, että litteä matriisi on yksiulotteinen matriisi, yksinkertaisesti lineaarinen.

Ominaisarvojen ja ominaisvektorien laskeminen

Ei -vektoreita käytetään hyvin yleisesti koneoppimispaketeissa. Joten kun lineaarinen muunnosfunktio esitetään matriisina, niin X, ominaisvektorit ovat vektoreita, jotka muuttuvat vain vektorin mittakaavassa mutta eivät sen suunnassa. Voimme sanoa, että:

Xv = γv

Tässä X on neliömatriisi ja γ sisältää ominaisarvot. Lisäksi v sisältää ominaisvektorit. NumPyn avulla ominaisarvot ja ominaisvektorit on helppo laskea. Tässä on koodinpätkä, jossa osoitamme saman:

arvot, evektorit = np.linalg.eig(matriisi)

Yllä olevan komennon tulos annetulla matriisilla annetaan tässä:

Pisteiden vektorituotteet

Pisteiden vektorituotteet on tapa kertoa 2 vektoria. Se kertoo sinulle kuinka suuri osa vektoreista on samaan suuntaan , toisin kuin ristituote, joka kertoo päinvastaisen, kuinka vähän vektoreita on samaan suuntaan (nimeltään ortogonaalisia). Voimme laskea kahden vektorin pistetuloksen koodinpätkän mukaisesti:

a = np. matriisi([3,5,6])
b = np. matriisi([2. 3,viisitoista,1])

np. piste(a, b)

Yllä olevan komennon tulos annetuilla matriiseilla on annettu tässä:

Matriisien lisääminen, vähentäminen ja kertominen

Useiden matriisien lisääminen ja vähentäminen on melko yksinkertaista toimintaa matriiseissa. Tämä voidaan tehdä kahdella tavalla. Katsotaanpa koodinpätkää näiden toimintojen suorittamiseen. Tämän yksinkertaisuuden vuoksi käytämme samaa matriisia kahdesti:

np. lisää(matriisi, matriisi)

Seuraavaksi kaksi matriisia voidaan vähentää seuraavasti:

np. vähennä(matriisi, matriisi)

Yllä olevan komennon tulos annetulla matriisilla annetaan tässä:

Kuten odotettiin, jokainen matriisin elementti lisätään/vähennetään vastaavalla elementillä. Matriisin kertominen on samanlainen kuin pistetuloksen löytäminen kuten aiemmin:

np. piste(matriisi, matriisi)

Yllä oleva koodi löytää kahden matriisin todellisen kertoarvon, joka annetaan seuraavasti:

matriisi*matriisi

Yllä olevan komennon tulos annetulla matriisilla annetaan tässä:

Johtopäätös

Tällä oppitunnilla kävimme läpi monia vektoreihin, matriiseihin ja matriiseihin liittyviä matemaattisia toimintoja, joita käytetään yleisesti Tietojen käsittely, kuvaavat tilastot ja datatiede. Tämä oli nopea oppitunti, joka kattoi vain yleisimmät ja tärkeimmät kohdat monenlaisista käsitteistä, mutta näiden toimintojen pitäisi antaa erittäin hyvä käsitys siitä, mitä kaikkia toimintoja voidaan suorittaa käsiteltäessä näitä tietorakenteita.

Jaa palautteesi oppitunnista vapaasti Twitterissä @linuxhint ja @sbmaggarwal (se olen minä!).