Python: vectori, matrice și tablouri cu NumPy

Python Vectors Matrices



În această lecție, vom analiza câteva sfaturi și trucuri îngrijite pentru a vă juca cu vectori, matrice și tablouri folosind biblioteca NumPy din Python. Această lecție este un punct de plecare foarte bun dacă începeți știința datelor și aveți nevoie de o prezentare matematică introductivă a acestor componente și a modului în care ne putem juca folosind NumPy în cod.

Biblioteca NumPy ne permite să efectuăm diverse operații care trebuie făcute pe structuri de date utilizate adesea în învățarea automată și știința datelor, cum ar fi vectori, matrice și tablouri. Vom arăta cele mai frecvente operațiuni cu NumPy, care sunt utilizate în multe conducte de învățare automată. În cele din urmă, vă rugăm să rețineți că NumPy este doar o modalitate de a efectua operațiile, astfel încât operațiunile matematice pe care le arătăm sunt principalul obiectiv al acestei lecții și nu pachetul NumPy în sine. Să începem.







Ce este un vector?

Potrivit Google, un Vector este o cantitate care are direcție, precum și magnitudine, mai ales ca determinarea poziției unui punct în spațiu față de altul.





Vectorii sunt foarte importanți în învățarea automată, deoarece nu doar descriu magnitudinea, ci și direcția caracteristicilor. Putem crea un vector în NumPy cu următorul fragment de cod:





import numpyla fel dede exemplu

row_vector = np.array([1,2,3])
imprimare(vector_rând)

În fragmentul de cod de mai sus, am creat un vector rând. De asemenea, putem crea un vector coloană ca:

import numpyla fel dede exemplu

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

Realizarea unei Matrice

O matrice poate fi înțeleasă pur și simplu ca o matrice bidimensională. Putem realiza o matrice cu NumPy realizând o matrice multidimensională:



matrice = np.array([[1,2,3],[4,5,6],[7,8,9]])
imprimare(matrice)

Deși matricea este exact similară cu matricea multidimensională, structura datelor matriciale nu este recomandată din două motive:

  1. Matricea este standardul atunci când vine vorba de pachetul NumPy
  2. Majoritatea operațiilor cu NumPy returnează matrici și nu o matrice

Utilizarea unei matrici rare

Pentru a reaminti, o matrice rară este cea în care majoritatea articolelor sunt zero. Acum, un scenariu comun în procesarea datelor și învățarea automată este prelucrarea matricelor în care majoritatea elementelor sunt zero. De exemplu, luați în considerare o matrice ale cărei rânduri descriu fiecare videoclip de pe YouTube și coloanele reprezintă fiecare utilizator înregistrat. Fiecare valoare reprezintă dacă utilizatorul a vizionat sau nu un videoclip. Desigur, majoritatea valorilor din această matrice vor fi zero. The avantaj cu matricea rară este că nu stochează valorile care sunt zero. Acest lucru are ca rezultat un imens avantaj de calcul și optimizarea stocării.

Să creăm o matrice de scântei aici:

din import scipy rar

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

Pentru a înțelege cum funcționează codul, vom analiza rezultatul aici:

În codul de mai sus, am folosit funcția NumPy pentru a crea un Rând rar comprimat matrice în care elementele diferite de zero sunt reprezentate folosind indexurile bazate pe zero. Există diferite tipuri de matrici rare, cum ar fi:

  • Coloană rar comprimată
  • Lista listelor
  • Dicționar de chei

Nu ne vom scufunda în alte matrici rare, dar știm că fiecare dintre acestea este specifică și că nimeni nu poate fi numit „cel mai bun”.

Aplicarea operațiunilor la toate elementele vectoriale

Este un scenariu obișnuit atunci când trebuie să aplicăm o operație comună mai multor elemente vectoriale. Acest lucru se poate face definind o lambda și apoi vectorizând aceeași. Să vedem câteva fragmente de cod pentru același lucru:

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

Pentru a înțelege cum funcționează codul, vom analiza rezultatul aici:

În fragmentul de cod de mai sus, am folosit funcția vectorize care face parte din biblioteca NumPy, pentru a transforma o definiție lambda simplă într-o funcție care poate procesa fiecare element al vectorului. Este important să rețineți că vectorizarea este doar o buclă peste elemente și nu are niciun efect asupra performanței programului. NumPy permite, de asemenea difuzarea , ceea ce înseamnă că, în loc de codul complex de mai sus, am fi putut face pur și simplu:

matrice* 5

Și rezultatul ar fi fost exact același. Am vrut să arăt mai întâi partea complexă, altfel ai fi omis secțiunea!

Media, varianța și abaterea standard

Cu NumPy, este ușor să efectuați operațiuni legate de statistici descriptive pe vectori. Media unui vector poate fi calculată ca:

np. înseamnă(matrice)

Varianța unui vector poate fi calculată ca:

np.var(matrice)

Abaterea standard a unui vector poate fi calculată ca:

de ex. std(matrice)

Ieșirea comenzilor de mai sus pe matricea dată este dată aici:

Transpunerea unei matrice

Transpunerea este o operație foarte obișnuită despre care veți auzi ori de câte ori sunteți înconjurat de matrice. Transpunerea este doar o modalitate de a schimba valorile coloanei și rândurilor unei matrice. Vă rugăm să rețineți că a vectorul nu poate fi transpus ca vector este doar o colecție de valori fără ca aceste valori să fie clasificate în rânduri și coloane. Vă rugăm să rețineți că convertirea unui vector rând într-un vector coloană nu se transpune (pe baza definițiilor algebrei liniare, care este în afara sferei acestei lecții).

Deocamdată, vom găsi pacea doar prin transpunerea unei matrice. Este foarte simplu să accesați transpunerea unei matrice cu NumPy:

matrice.T

Ieșirea comenzii de mai sus pe matricea dată este dată aici:

Aceeași operație poate fi efectuată pe un vector rând pentru al converti într-un vector coloană.

Aplatizarea unei matrice

Putem converti o matrice într-o matrice unidimensională dacă dorim să procesăm elementele sale într-un mod liniar. Acest lucru se poate face cu următorul fragment de cod:

matrice.aplacă()

Ieșirea comenzii de mai sus pe matricea dată este dată aici:

Rețineți că matricea turtită este o matrice unidimensională, pur și simplu liniară.

Calculul valorilor proprii și vectorilor proprii

Vectorii proprii sunt foarte des folosiți în pachetele de învățare automată. Deci, atunci când o funcție de transformare liniară este prezentată ca o matrice, atunci X, vectorii proprii sunt vectorii care se schimbă numai în scara vectorului, dar nu și în direcția acestuia. Putem spune că:

Xv = γv

Aici, X este matricea pătrată și γ conține valorile proprii. De asemenea, v conține vectorii proprii. Cu NumPy, este ușor să calculați valorile proprii și vectorii proprii. Iată fragmentul de cod în care demonstrăm același lucru:

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

Ieșirea comenzii de mai sus pe matricea dată este dată aici:

Produse dotate de vectori

Dot Products of Vectors este un mod de a multiplica 2 vectori. Vă spune despre cât de mulți vectori sunt în aceeași direcție , spre deosebire de produsul încrucișat care vă spune opusul, cât de puțini sunt vectorii în aceeași direcție (numită ortogonală). Putem calcula produsul punct al a doi vectori așa cum este dat în fragmentul de cod aici:

a = np.array([3,5,6])
b = np.array([2. 3,cincisprezece,1])

np.dot(a, b)

Ieșirea comenzii de mai sus pe matricile date este dată aici:

Adunarea, scăderea și multiplicarea matricelor

Adunarea și scăderea mai multor matrice este o operație destul de simplă în matrice. Există două moduri în care acest lucru poate fi realizat. Să ne uităm la fragmentul de cod pentru a efectua aceste operațiuni. Pentru a păstra acest lucru simplu, vom folosi aceeași matrice de două ori:

np.add(matrice, matrice)

Apoi, două matrice pot fi scăzute ca:

np. scade(matrice, matrice)

Ieșirea comenzii de mai sus pe matricea dată este dată aici:

După cum era de așteptat, fiecare dintre elementele din matrice este adăugat / scăzut cu elementul corespunzător. Înmulțirea unei matrice este similară cu găsirea produsului punct, așa cum am făcut mai devreme:

np.dot(matrice, matrice)

Codul de mai sus va găsi adevărata valoare de multiplicare a două matrici, dată ca:

matrice*matrice

Ieșirea comenzii de mai sus pe matricea dată este dată aici:

Concluzie

În această lecție, am parcurs o mulțime de operații matematice legate de vectori, matrice și tablouri, care sunt utilizate în mod obișnuit Procesarea datelor, statistici descriptive și știința datelor. Aceasta a fost o lecție rapidă care a acoperit doar cele mai frecvente și mai importante secțiuni din varietatea largă de concepte, dar aceste operații ar trebui să ofere o idee foarte bună despre ceea ce toate operațiunile pot fi efectuate în timp ce se ocupă de aceste structuri de date.

Vă rugăm să împărtășiți liber feedback-ul dvs. despre lecția de pe Twitter @linuxhint și @sbmaggarwal (asta sunt eu!).