lettura facile

Creare le matrici con NumPy in Python

In questa lezione vediamo come creare le matrici su Python tramite la libreria NumPy.

Cos'è una matrice? Quando parlo di matrici, mi riferisco essenzialmente a tabelle di numeri. Questi numeri sono disposti in righe e colonne. Ad esempio, questa è una matrice con due righe e tre colonne. $$ \begin{pmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \end{pmatrix} $$ Puoi svolgere diverse operazioni su una matrice: sommare due matrici, moltiplicarle, calcolare il determinante, l'inversa, ecc. 

Capiamoci, una matrice può essere vista come una semplice lista di liste in Python.

Tuttavia, conviene crearle con NumPy perché è molto più semplice e, cosa importante, molto più veloce.

Inoltre, la libreria NumPy dispone di molte funzioni e metodi che ti permettono di eseguire le principali operazioni matriciali con poche righe di codice.

Creare una matrice

Per cominciare, ti mostro come creare una matrice base con NumPy. Carica il modulo in memoria.

import numpy as np

Poi crea una matrice 2x3 con i valori disposti su 2 righe e 3 colonne usando il metodo np.array().

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

Cosa stiamo facendo qui? Hai preso una lista di liste in Python, cioè `[[1, 2, 3], [4, 5, 6]]`, e l'hai passata alla funzione np.array().

Come puoi notare, i numeri in ciascuna riga sono separati da una virgola e ogni riga è racchiusa tra parentesi quadre.

NumPy trasforma quella lista in un oggetto, una struttura dati chiamata array che contiene la matrice.

Se esegui questo codice, otterrai:

[ [1 2 3]
  [4 5 6] ]

Ecco una matrice 2x3 con due righe e tre colonne. Facile, no?

L'oggetto che hai appena creato equivale a questa matrice.

$$ \begin{pmatrix}  1 & 2 & 3 \\ 4 & 5 & 6  \end{pmatrix} $$

Nei prossimi paragrafi vedremo come accedere agli elementi della matrici e come eseguire alcune operazioni matriciali.

Accesso agli elementi

Ora supponiamo che tu abbia questa matrice `[[1, 2, 3], [4, 5, 6]]` memorizzata nella variabile "matrice" e vuoi accedere a un elemento specifico.

Ad esempio, vuoi leggere il valore che si trova nella seconda riga e nella seconda colonna.

Puoi farlo così: matrice[1, 1]

elemento = matrice[1, 1]
print(elemento)

In pratica, con questo comando stai dicendo a NumPy di prendere l'elemento alla posizione 1 (seconda riga) e 1 (seconda colonna).

5

In questo caso Python accede e restituisce il valore  5 dell'elemento nella seconda riga e seconda colonna `[[1, 2, 3], [4, 5, 6]]` .

Ricorda, in Python gli indici partono da 0! Quindi, la prima riga della matrice ha indice zero. Allo stesso modo, anche la prima colonna della matrice ha indice zero.

Operazioni elementari sulle matrici

Una volta che hai definito una matrice, puoi fare diverse operazioni matematiche.

Ad esempio, se vuoi sommare un numero a tutti gli elementi della matrice `[[1, 2, 3], [4, 5, 6]]`, puoi farlo in un colpo solo:

nuova_matrice = matrice + 10
print(nuova_matrice)

Questo codice legge la matrice memorizzata nella variabile "matrice" e aggiunge 10 a tutti gli elementi della matrice.

Poi salva la nuova matrice nella variabile "nuova_matrice" e stampa il risultato.

[ [11 12 13]
  [14 15 16] ]

Puoi fare lo stesso anche con la sottrazione (-), la moltiplicazione (*) o la divisione (/).

Sono tutte operazioni elemento per elemento perché eseguono l'operazione sugli elementi che si trovano nella stessa posizione nelle matrici.

Questo è molto utile perché ti evita di dover scrivere cicli annidati per iterare su ogni elemento, risparmiandoti tempo e fatica.

Moltiplicazione di matrici

Una delle operazioni più utili che puoi fare con le matrici è la moltiplicazione riga per colonna.

In questo caso, non ti sto parlando di moltiplicare ogni elemento per un numero, ma di fare una vera e propria moltiplicazione tra due matrici come accade in algebra lineare.

C'è una regola precisa per farlo, e NumPy ti permette di eseguirla facilmente tramite la funzione dot().

Ad esempio, crea due matrici quadrate 2x2

A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])

Poi calcola il prodotto riga-colonna delle due matrici usando la funzione dot().

C = np.dot(A, B)
print(C)

Il risultato sarà un'altra matrice

[[19 22]
[43 50]]

Se non ti è chiaro come funziona la moltiplicazione tra matrici, immagina che stiamo moltiplicando le righe della prima matrice con le colonne della seconda.

Ogni elemento finale è la somma dei prodotti tra i numeri corrispondenti della riga e della colonna.

Ecco il calcolo del prodotto riga per colonna svolto passo dopo passo: $$ \begin{pmatrix} 1 & 2 \\ 3 & 4 \end{pmatrix} \cdot \begin{pmatrix} 5 & 6 \\ 7 & 8 \end{pmatrix} = \begin{pmatrix} 1 \cdot 5 + 2 \cdot 7 & 1 \cdot 6 + 2 \cdot 8 \\ 3 \cdot 5 + 4 \cdot 7 & 3 \cdot 6 + 4 \cdot 8 \end{pmatrix} =  \begin{pmatrix} 19 & 22 \\ 43 & 50 \end{pmatrix} $$

Altre operazioni utili

NumPy è davvero un coltellino svizzero quando si parla di operazioni con matrici. Ti permette di fare tantissime cose in modo semplice. Eccone alcune:

  • Trasporre una matrice: Cambiare righe in colonne, e viceversa.

    trasposta = np.transpose(matrice)
    print(trasposta)

    [[1 4]
    [2 5]
    [3 6]]

  • Determinante di una matrice: Se hai una matrice quadrata, puoi calcolarne il determinante, che è una proprietà importante in algebra lineare. Ricorda, nei calcoli computazionali svolti da Python c'è sempre un margine di approssimazione.

    det = np.linalg.det(A)
    print(det)

    -2.0000000000000004

  • Inversa di una matrice: Puoi trovare l'inversa di una matrice quadrata. Conoscere la matrice inversa è molto utile per risolvere sistemi lineari.

    inversa = np.linalg.inv(A)
    print(inversa)

    [[-2.   1. ]
     [ 1.5 -0.5]]

In conclusione, le matrici possono sembrarti un po' difficili all'inizio, ma una volta che ci entri dentro, scopri che sono strumenti di lavoro semplici e potenti.

Per molte persone, le matrici potrebbero sembrare un argomento complesso e un po' noioso, ma ti assicuro che non è così. In realtà, se capisci bene come funzionano, puoi fare cose incredibili con loro.

Perché usare la libreria NumPy?

La libreria NumPy rende il calcolo matriciale più accessibile, semplifica le operazioni che normalmente sarebbero lunghe e complesse da implementare nel linguaggio Python.

La bellezza sta nel fatto che puoi eseguire calcoli matriciali anche complessi con poche righe di codice. E' un bel vantaggio!.

Per questa ragione NumPy è probabilmente la libreria di Python più usata dai data scientist.




Se qualcosa non ti è chiaro, scrivi la tua domanda nei commenti.




FacebookTwitterLinkedinLinkedin