Trovare la norma di un array usando numpy

Trovare la norma di un array usando numpy

In questo post, descrivo la ricerca della norma di un array numpy. La norma di un array è una funzione che mappa l'array a un numero reale non negativo. Per trovare la norma di un array numpy, usiamo il numpy di Numpy.linalg.Metodo Norm. Il metodo prende un array o un oggetto simile a un array (Ex: Python List) come input e restituisce un galleggiante o un array di valori normali.

Vediamo un esempio.

$ Python3
Python 3.8.5 (impostazione predefinita, 8 marzo 2021, 13:02:45)
[GCC 9.3.0] su Linux2
Digita "Help", "Copyright", "Credit" o "Licenza" per ulteriori informazioni.
>>> Importa Numpy come NP
>>> a = np.Linspace (-4, 4, 9)
>>> a
array ([-4., -3., -2., -1., 0., 1., 2., 3., 4.])
>>> np.linalg.Norm (a)
7.745966692414834

La norma predefinita calcolata da Numpy è la Norma L2 che è anche nota come norma euclidea. L'ordine di norma può essere specificato utilizzando il parametro Ord fornito a Numpy.linalg.norma. Continuando dall'alto,

>>> np.linalg.Norm (A, Ord = 1)
20.0

L'istruzione sopra riportata ha calcolato la norma 1. La norma 1 è semplicemente la somma dei valori assoluti dell'array. In generale, la norma di un vettore per qualsiasi ordine ordina viene calcolata come:

(∑i | x | ord) 1/ord

Dove la somma viene eseguita sul valore assoluto di ciascun elemento dell'array. Si può calcolare la norma di bypass dell'infinito.Inf come ordine. Norm Infinity è il valore assoluto massimo di tutti gli elementi nell'array.

>>> np.linalg.Norm (A, Ord = NP.INF)
4.0

Supponiamo di avere una matrice per la quale la norma dovrebbe essere calcolata.

>>> a = np.Linspace (-4, 4, 9).Reshape (3, 3)
>>> a
array ([[-4., -3., -2.",
[-1., 0., 1.",
[2., 3., 4.]])
>>> np.linalg.Norm (a)
7.745966692414834

Quanto sopra restituisce la norma euclidea calcolata su tutta la matrice. Ma ci sono scenari in cui saremo tenuti a calcolare le norme su un determinato asse. Numpy consente inoltre di utilizzare un asse di parametro per specificare un asse lungo il quale la norma può essere calcolata per le matrici. Usando l'asse dei parametri, si può passare l'asse attraverso il quale la norma deve essere calcolata. L'asse 0 è la prima dimensione. Continuando dall'esempio precedente, se specifichiamo Axis = 0, la norma verrà calcolata attraverso le righe e specificando l'asse = 1 calcola la norma tra le colonne.

>>> a
array ([[-4., -3., -2.",
[-1., 0., 1.",
[2., 3., 4.]])
>>> np.linalg.Norm (A, Axis = 0)
array ([4.58257569, 4.24264069, 4.58257569])
>>> np.linalg.Norm (A, Asse = 1)
array ([5.38516481, 1.41421356, 5.38516481])

Se si tratta di una matrice multidimensionale, una tupla di numeri interi che specifica l'asse attraverso il quale deve essere calcolata la norma può essere passata al parametro dell'asse.

>>> a = np.Linspace (1, 8, 8).Reshape (2, 2, 2)
>>> a
array ([[[1., 2.",
[3., 4.]],
[[5., 6.",
[7., 8.]]])
>>> np.linalg.Norm (A, Axis = (1, 2))
array ([5.47722558, 13.19090596])
>>> a [0 ,:,:]
array ([[1., 2.",
[3., 4.]])
>>> np.linalg.Norm (a [0 ,:,:])
5.477225575051661
>>> a [1 ,:,:]
array ([[5., 6.",
[7., 8.]])
>>> np.linalg.Norm (a [1 ,:,:])
13.19090595827292

Nell'esempio sopra, quando abbiamo specificato l'asse = (1,2) la norma viene calcolata attraverso l'asse 1 e 2 per ogni subarray nell'asse 0.