Python: vektori, matricas un masīvi ar NumPy

Python Vectors Matrices



Šajā nodarbībā mēs apskatīsim dažus gudrus padomus un trikus, kā spēlēt ar vektoriem, matricām un masīviem, izmantojot NumPy bibliotēku Python. Šī nodarbība ir ļoti labs sākumpunkts, ja jūs sākat strādāt ar datu zinātni un jums ir nepieciešams ievada matemātisks pārskats par šīm sastāvdaļām un to, kā mēs varam ar tām spēlēt, izmantojot kodu NumPy.

NumPy bibliotēka ļauj mums veikt dažādas darbības, kas jāveic ar datu struktūrām, kuras bieži tiek izmantotas mašīnmācībā un datu zinātnē, piemēram, vektoriem, matricām un masīviem. Mēs parādīsim tikai visbiežāk veiktās darbības ar NumPy, kuras tiek izmantotas daudzos mašīnmācīšanās kanālos. Visbeidzot, lūdzu, ņemiet vērā, ka NumPy ir tikai veids, kā veikt darbības, tāpēc mūsu parādītās matemātiskās operācijas ir šīs nodarbības galvenais mērķis, nevis pati NumPy pakete. Sāksim.







Kas ir vektors?

Saskaņā ar Google teikto, vektors ir daudzums, kam ir virziens un lielums, jo īpaši, lai noteiktu viena punkta stāvokli telpā attiecībā pret otru.





Mašīnu apguvē vektori ir ļoti svarīgi, jo tie ne tikai raksturo funkciju lielumu, bet arī virzienu. Mēs varam izveidot vektoru NumPy ar šādu koda fragmentu:





importēt numpypiem

row_vector = np.masīvs([1,2,3])
drukāt(row_vector)

Iepriekš minētajā koda fragmentā mēs izveidojām rindas vektoru. Mēs varam arī izveidot kolonnu vektoru kā:

importēt numpypiem

col_vector = np.masīvs([[1],[2],[3]])
drukāt(col_vector)

Matricas veidošana

Matricu var vienkārši saprast kā divdimensiju masīvu. Mēs varam izveidot matricu ar NumPy, izveidojot daudzdimensiju masīvu:



matrica = np. masīvs([[1,2,3],[4,5,6],[7,8,9]])
drukāt(matrica)

Lai gan matrica ir tieši līdzīga daudzdimensiju masīvam, matricas datu struktūra nav ieteicama divu iemeslu dēļ:

  1. Masīvs ir standarts, kad runa ir par NumPy pakotni
  2. Lielākā daļa operāciju ar NumPy atgriež masīvus, nevis matricu

Izmantojot retu matricu

Atgādinām, ka reta matrica ir tā, kurā lielākā daļa vienību ir nulle. Tagad parasts scenārijs datu apstrādē un mašīnmācībā ir matricu apstrāde, kurā lielākā daļa elementu ir nulle. Piemēram, ņemiet vērā matricu, kuras rindas apraksta katru videoklipu vietnē Youtube, un kolonnas attēlo katru reģistrēto lietotāju. Katra vērtība norāda, vai lietotājs ir skatījies videoklipu vai nē. Protams, lielākā daļa šīs matricas vērtību būs nulle. The priekšrocība ar retu matricu ir tas, ka tajā netiek saglabātas nulles vērtības. Tā rezultātā tiek iegūtas milzīgas skaitļošanas priekšrocības un optimizēta uzglabāšana.

Izveidosim dzirksteles matricu šeit:

no scipy importa reti

original_matrix = np.masīvs([[1,0,3],[0,0,6],[7,0,0]])
sparse_matrix = reti. csr_matrica(original_matrix)
drukāt(sparse_matrix)

Lai saprastu, kā kods darbojas, mēs apskatīsim izvadi šeit:

Iepriekš minētajā kodā mēs izmantojām NumPy funkciju, lai izveidotu Saspiesta reta rinda matrica, kurā elementi, kas nav nulle, tiek attēloti, izmantojot nulles indeksus. Pastāv dažāda veida retas matricas, piemēram:

  • Saspiesta reta kolonna
  • Sarakstu saraksts
  • Atslēgu vārdnīca

Mēs šeit neiedziļināsimies citās retās matricās, bet zinam, ka katra to izmantošana ir specifiska un nevienu nevar nosaukt par “labāko”.

Darbību piemērošana visiem vektora elementiem

Tas ir izplatīts scenārijs, kad mums jāpiemēro kopīga darbība vairākiem vektoru elementiem. To var izdarīt, definējot lambda un pēc tam to vektorizējot. Apskatīsim dažus koda fragmentus tam pašam:

matrica = np. masīvs([
[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(matrica)

Lai saprastu, kā kods darbojas, mēs apskatīsim izvadi šeit:

Iepriekš minētajā koda fragmentā mēs izmantojām funkciju vektorizēt, kas ir daļa no NumPy bibliotēkas, lai vienkāršu lambda definīciju pārveidotu par funkciju, kas var apstrādāt katru vektora elementu. Ir svarīgi atzīmēt, ka vektorizācija ir tikai cilpa pāri elementiem un tas neietekmē programmas darbību. NumPy arī ļauj apraide , kas nozīmē, ka iepriekš minētā sarežģītā koda vietā mēs būtu varējuši vienkārši:

matrica* 5

Un rezultāts būtu bijis tieši tāds pats. Es gribēju vispirms parādīt sarežģīto daļu, pretējā gadījumā jūs būtu izlaidis sadaļu!

Vidējā, dispersija un standarta novirze

Izmantojot NumPy, ir viegli veikt darbības, kas saistītas ar aprakstošo statistiku par vektoriem. Vektora vidējo vērtību var aprēķināt šādi:

np. nozīmē(matrica)

Vektora dispersiju var aprēķināt šādi:

np.var(matrica)

Vektora standarta novirzi var aprēķināt šādi:

piemēram, std(matrica)

Iepriekš minēto komandu iznākums dotajā matricā ir dots šeit:

Matricas transponēšana

Transponēšana ir ļoti izplatīta darbība, par kuru jūs dzirdēsit ikreiz, kad jūs ieskauj matricas. Transponēšana ir tikai veids, kā apmainīt matricas kolonnu un rindu vērtības. Lūdzu, ņemiet vērā, ka a vektoru nevar transponēt kā vektors ir tikai vērtību kolekcija, šīs vērtības netiek iedalītas rindās un kolonnās. Lūdzu, ņemiet vērā, ka rindas vektora pārveidošana par kolonnu vektoru netiek transponēta (pamatojoties uz lineārās algebras definīcijām, kas ir ārpus šīs nodarbības jomas).

Pagaidām mēs atradīsim mieru, tikai transponējot matricu. Piekļuve matricas transponēšanai ar NumPy ir ļoti vienkārša:

matrica.T

Iepriekš minētās komandas iznākums dotajā matricā ir dots šeit:

To pašu darbību var veikt ar rindu vektoru, lai to pārvērstu par kolonnu vektoru.

Matricas izlīdzināšana

Mēs varam pārvērst matricu par viendimensiju masīvu, ja vēlamies tās elementus apstrādāt lineāri. To var izdarīt ar šādu koda fragmentu:

matrica.plakan()

Iepriekš minētās komandas iznākums dotajā matricā ir dots šeit:

Ņemiet vērā, ka saplacinātā matrica ir viendimensiju masīvs, kas ir vienkārši lineārs.

Eigenvalues ​​un Eigenvectors aprēķināšana

Maģistrantūras pakotnēs ļoti bieži tiek izmantoti īpatnējie vektori. Tātad, ja lineārās transformācijas funkcija tiek uzrādīta kā matrica, tad X, Eigenvectors ir vektori, kas mainās tikai vektora mērogā, bet ne tā virzienā. Mēs varam teikt, ka:

Xv = γv

Šeit X ir kvadrātveida matrica, un γ satur Eigenvalues. Arī v satur Eigenvectors. Izmantojot NumPy, ir viegli aprēķināt einvalues ​​un Eigenvectors. Šeit ir koda fragments, kurā mēs demonstrējam to pašu:

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

Iepriekš minētās komandas iznākums dotajā matricā ir dots šeit:

Punktu vektorprodukti

Vektora punktu produkti ir veids, kā reizināt 2 vektorus. Tas jums stāsta par cik no vektoriem ir vienā virzienā , atšķirībā no šķērsprodukta, kas norāda pretējo, cik maz vektoru ir vienā virzienā (tos sauc par ortogonāliem). Mēs varam aprēķināt divu vektoru punktu reizinājumu, kā norādīts koda fragmentā:

a = np. masīvs([3,5,6])
b = np. masīvs([2. 3,piecpadsmit,1])

np.punkts(a, b)

Iepriekš minētās komandas iznākums dotajos masīvos ir norādīts šeit:

Matricu pievienošana, atņemšana un reizināšana

Vairāku matricu pievienošana un atņemšana ir diezgan vienkārša darbība matricās. Ir divi veidi, kā to var izdarīt. Apskatīsim koda fragmentu, lai veiktu šīs darbības. Lai tas būtu vienkārši, mēs vienu un to pašu matricu izmantosim divas reizes:

np. pievienot(matrica, matrica)

Tālāk divas matricas var atņemt šādi:

np. atņemt(matrica, matrica)

Iepriekš minētās komandas iznākums dotajā matricā ir dots šeit:

Kā gaidīts, katrs no matricas elementiem tiek pievienots/atņemts ar atbilstošo elementu. Matricas reizināšana ir līdzīga punktu produkta atrašanai, kā mēs to darījām iepriekš:

np.punkts(matrica, matrica)

Iepriekš minētais kods atradīs divu matricu patieso reizināšanas vērtību, kas norādīta kā:

matrica*matrica

Iepriekš minētās komandas iznākums dotajā matricā ir dots šeit:

Secinājums

Šajā nodarbībā mēs veicām daudzas matemātiskas darbības, kas saistītas ar vektoriem, matricām un masīviem, kuras parasti izmanto Datu apstrāde, aprakstošā statistika un datu zinātne. Šī bija ātra mācība, kas aptvēra tikai visizplatītākās un vissvarīgākās sadaļas visdažādākajos jēdzienos, taču šīm darbībām vajadzētu sniegt ļoti labu priekšstatu par to, ko visas darbības var veikt, strādājot ar šīm datu struktūrām.

Lūdzu, brīvi dalieties savās atsauksmēs par nodarbību vietnē Twitter @linuxhint un @sbmaggarwal (tas esmu es!).