Numpy – Prodotto scalare e algebra lineare
Array
Facciamo ancora un po di esercizi con gli array creando due nuovi array.
L’indice del corso lo puoi trovare a questo Link: https://computer4dummy.altervista.org/programmazione-guide-alla-programmazione/numpy-per-python/
a = np.array([1,2]) b = np.array([2,1])
Supponiamo di voler assegnare alla variabile res la somma del prodotto degli elementi degli array quindi: 1*2 + 2*1 = 4
res = 0 for e, f in zip(a,b): res += e*f res Out[43]: 4
Otteniamo 4 come previsto, altra operazione è la moltiplicazione di due array
a*b Out[44]: array([2, 2])
Possiamo quindi ottenere lo stesso risultato facendo la somma della moltiplicazione dei 2 array:
np.sum(a*b) Out[45]: 4
Questo è possibile solo quando gli array sono delle stesse dimensioni.
Un altro modo per ottenere lo stesso risultato è il seguente:
(a*b).sum() Out[46]: 4
Prodotto di due array .dot()
La guida di riferimento è disponibile in lingua inglese al seguente link: https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.dot.html#numpy.dot
Nel modulo numpy è presente una funzione dot() che restituisce il prodotto di due array, vediamo quindi un po di esempi:
np.dot(a,b) Out[50]: 4
Può essere anche richiamata:
a.dot(b) Out[51]: 4 b.dot(a) Out[52]: 4
Radice quadrata .sqrt()
La guida di riferimento è disponibile in lingua inglese al seguente link: https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.sqrt.html#numpy.sqrt
Altri esempi possono essere utilizzati per calcolare la radice quadrata della somma dei quadrati di ogni elemento dell’array.
amag = np.sqrt((a*a).sum()) amag Out[54]: 2.2360679774997898
Altre funzioni all’interno del metodo linalg
La guida di riferimento è disponibile in lingua inglese al seguente link: https://docs.scipy.org/doc/numpy-1.13.0/reference/routines.linalg.html
Prodotto scalare
La guida di riferimento è disponibile in lingua inglese al seguente link: https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.linalg.norm.html#numpy.linalg.norm
amag = np.linalg.norm(a) amag Out[56]: 2.2360679774997898
Per il coseno dell’angolo
cosangle = a.dot(b) / (np.linalg.norm(a) * np.linalg.norm(b)) cosangle Out[58]: 0.79999999999999982
L’angolo è:
angle = np.arccos(cosangle) angle Out[60]: 0.6435011087932847