Python: vectors, matrius i matrius amb NumPy

Python Vectors Matrices



En aquesta lliçó, veurem alguns consells i trucs per jugar amb vectors, matrius i matrius mitjançant la biblioteca NumPy de Python. Aquesta lliçó és un molt bon punt de partida si esteu començant a fer ciències de les dades i necessiteu una introducció matemàtica introductòria a aquests components i com podem jugar amb ells utilitzant NumPy al codi.

La biblioteca NumPy ens permet realitzar diverses operacions que cal fer en estructures de dades sovint utilitzades en Machine Learning i Data Science com vectors, matrius i matrius. Només mostrarem les operacions més habituals amb NumPy que s’utilitzen en molts conductes d’aprenentatge automàtic. Finalment, tingueu en compte que NumPy és només una manera de realitzar les operacions, de manera que les operacions matemàtiques que mostrem són el focus principal d’aquesta lliçó i no el paquet NumPy en si. Comencem.







Què és un vector?

Segons Google, un vector és una quantitat que té direcció i magnitud, sobretot per determinar la posició d'un punt en l'espai en relació amb un altre.





Els vectors són molt importants en l’aprenentatge automàtic, ja que no només descriuen la magnitud, sinó també la direcció de les característiques. Podem crear un vector a NumPy amb el següent fragment de codi:





importar numpycomper exemple

fila_vector = matriu np([1,2,3])
imprimir(fila_vector)

Al fragment de codi anterior, vam crear un vector de fila. També podem crear un vector de columna com:

importar numpycomper exemple

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

Fent una matriu

Una matriu es pot entendre simplement com una matriu bidimensional. Podem fer una matriu amb NumPy fent una matriu multidimensional:



matriu = matriu np([[1,2,3],[4,5,6],[7,8,9]])
imprimir(matriu)

Tot i que la matriu és exactament similar a la matriu multidimensional, no es recomana l'estructura de dades de la matriu per dos motius:

  1. La matriu és l’estàndard pel que fa al paquet NumPy
  2. La majoria de les operacions amb NumPy retorna matrius i no una matriu

Utilització d’una matriu dispersa

Per recordar-ho, una matriu escassa és aquella en què la majoria dels elements són nuls. Ara, un escenari comú en el processament de dades i l'aprenentatge automàtic és el processament de matrius en què la majoria dels elements són nuls. Per exemple, considerem una matriu les files de la qual descriuen tots els vídeos de Youtube i les columnes que representen cada usuari registrat. Cada valor representa si l'usuari ha vist o no un vídeo. Per descomptat, la majoria dels valors d’aquesta matriu seran zero. El avantatge amb matriu escassa és que no emmagatzema els valors que són zero. Això es tradueix en un enorme avantatge computacional i optimització de l’emmagatzematge.

Creem aquí una matriu d’espurna:

de la importació escassa escassa

matriu_original = matriu np([[1,0,3],[0,0,6],[7,0,0]])
sparse_matrix = sparse.csr_matrix(matriu_original)
imprimir(matriu_escassa)

Per entendre com funciona el codi, veurem la sortida aquí:

Al codi anterior, hem utilitzat la funció de NumPy per crear un Fila escassa comprimida matriu on es representen elements diferents de zero mitjançant els índexs basats en zero. Hi ha diversos tipus de matriu escassa, com ara:

  • Columna escassa comprimida
  • Llista de llistes
  • Diccionari de claus

Aquí no ens endinsarem en altres matrius escasses, però sabem que cadascun dels seus usos és específic i que ningú no es pot anomenar 'millor'.

Aplicació d’operacions a tots els elements vectorials

És un escenari habitual quan hem d'aplicar una operació comuna a diversos elements vectorials. Això es pot fer definint una lambda i vectoritzant la mateixa. Vegem un fragment de codi per al mateix:

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

Per entendre com funciona el codi, veurem la sortida aquí:

Al fragment de codi anterior, hem utilitzat la funció vectorize que forma part de la biblioteca NumPy, per transformar una definició lambda simple en una funció que pugui processar tots i cadascun dels elements del vector. És important tenir en compte que vectoritzar és només un bucle sobre els elements i no té cap efecte en el rendiment del programa. NumPy també permet difusió , el que significa que en lloc del codi complex anterior, podríem haver fet:

matriu* 5

I el resultat hauria estat exactament el mateix. Primer volia mostrar la part complexa, en cas contrari hauríeu saltat la secció.

Mitjana, variació i desviació estàndard

Amb NumPy, és fàcil realitzar operacions relacionades amb estadístiques descriptives de vectors. La mitjana d'un vector es pot calcular com:

np significa(matriu)

La variació d'un vector es pot calcular com:

np.var(matriu)

La desviació estàndard d'un vector es pot calcular com:

p. ex., std(matriu)

Aquí es dóna la sortida de les ordres anteriors a la matriu donada:

Transposició d’una matriu

La transposició és una operació molt comuna de la qual sabreu parlar sempre que esteu envoltats de matrius. La transposició és només una manera d’intercanviar els valors de les columnes i les files d’una matriu. Tingueu en compte que a el vector no es pot transposar com a vector només és una col·lecció de valors sense que aquests valors es classifiquin en files i columnes. Tingueu en compte que convertir un vector de fila en un vector de columna no es transmet (basat en les definicions d’àlgebra lineal, que queda fora de l’abast d’aquesta lliçó).

De moment, trobarem pau només transposant una matriu. És molt senzill accedir a la transposició d’una matriu amb NumPy:

matriu.T

La sortida de l'ordre anterior a la matriu donada es dóna aquí:

Es pot realitzar la mateixa operació en un vector de fila per convertir-lo en un vector de columna.

Aplanant una matriu

Podem convertir una matriu en una matriu unidimensional si volem processar els seus elements de manera lineal. Això es pot fer amb el fragment de codi següent:

matriu.aplanar()

La sortida de l'ordre anterior a la matriu donada es dóna aquí:

Tingueu en compte que la matriu aplanada és una matriu unidimensional, simplement lineal.

Càlcul de valors propis i vectors propis

Els vectors propis s’utilitzen molt sovint als paquets d’aprenentatge automàtic. Per tant, quan una funció de transformació lineal es presenta com una matriu, llavors X, els vectors propis són els vectors que només canvien en l’escala del vector però no en la seva direcció. Podem dir que:

Xv = γv

Aquí, X és la matriu quadrada i γ conté els valors propis. A més, v conté els vectors propis. Amb NumPy, és fàcil calcular valors propis i vectors propis. Aquí teniu el fragment de codi on demostrem el mateix:

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

La sortida de l'ordre anterior a la matriu donada es dóna aquí:

Productes de punts de vectors

Dot Products of Vectors és una manera de multiplicar 2 vectors. T’ho explica quant dels vectors es troben en la mateixa direcció , a diferència del producte creuat que us indica el contrari, el poc que tenen els vectors en la mateixa direcció (anomenats ortogonals). Podem calcular el producte punt de dos vectors tal com es dóna al fragment de codi aquí:

a = np.array([3,5,6])
b = matriu np([23,15,1])

np.dot(a, b)

Aquí es dóna la sortida de l'ordre anterior a les matrius donades:

Suma, resta i multiplicació de matrius

Sumar i restar múltiples matrius és una operació bastant senzilla a les matrius. Hi ha dues maneres de fer-ho. Vegem el fragment de codi per realitzar aquestes operacions. Amb el propòsit de simplificar-ho, farem servir la mateixa matriu dues vegades:

np.add(matriu, matriu)

A continuació, es poden restar dues matrius com:

np. restar(matriu, matriu)

La sortida de l'ordre anterior a la matriu donada es dóna aquí:

Com era d’esperar, cadascun dels elements de la matriu s’afegeix / resta amb l’element corresponent. Multiplicar una matriu és similar a trobar el producte punt com hem fet anteriorment:

np.dot(matriu, matriu)

El codi anterior trobarà el veritable valor de multiplicació de dues matrius, donat com:

matriu*matriu

La sortida de l'ordre anterior a la matriu donada es dóna aquí:

Conclusió

En aquesta lliçó, hem passat per moltes operacions matemàtiques relacionades amb vectors, matrius i matrius que s’utilitzen habitualment en el processament de dades, estadístiques descriptives i ciència de dades. Aquesta va ser una lliçó ràpida que va cobrir només les seccions més habituals i més importants de l’àmplia varietat de conceptes, però aquestes operacions haurien de donar una bona idea de què es poden realitzar totes les operacions mentre es tracta d’aquestes estructures de dades.

Comparteix els teus comentaris lliurement sobre la lliçó a Twitter amb @linuxhint i @sbmaggarwal (aquest sóc jo!).