Numpy Tutorial - NumPy Math Operation and Broadcasting

  1. Operazione aritmetica NumPy
  2. NumPy Broadcasting

In questo capitolo tratteremo le operazioni in NumPy, come le operazioni aritmetiche di base e le operazioni a matrice.

Cominciamo con le operazioni aritmetiche di base.

Operazione aritmetica NumPy

Aggiunta, sottrazione, moltiplicazione e divisione sono le operazioni aritmetiche più elementari di NumPy. Sono simili alle normali operazioni aritmetiche tra numeri.

import numpy as np
arrayA = np.array([[1, 2, 3],[4, 5, 6],[7, 8, 9]])
arrayB = arrayA.T
#array([[1, 2, 3],
#       [4, 5, 6],
#       [7, 8, 9]])

arrayB = arrayA.T
#array([[1, 4, 7],
#       [2, 5, 8],
#       [3, 6, 9]])

arrayA + arrayB
#array([[ 2,  6, 10],
#       [ 6, 10, 14],
#       [10, 14, 18]])

arrayA - arrayB
#array([[ 0, -2, -4],
#       [ 2,  0, -2],
#       [ 4,  2,  0]])

arrayA * arrayB
#array([[ 1,  8, 21],
#       [ 8, 25, 48],
#       [21, 48, 81]])

arrayA / arrayB
#array([[1.        , 0.5       , 0.42857143],
#       [2.        , 1.        , 0.75      ],
#       [2.33333333, 1.33333333, 1.        ]])

Va notato che l’operazione di moltiplicazione di un array - *, moltiplica gli elementi nella stessa posizione sulle due matrici per ottenere l’elemento nella stessa posizione di un array del risultato. Non è il prodotto del punto di due date matrici che dovrebbe essere calcolato con il metodo np.dot.

np.dot(arrayA, arrayB)
#array([[ 14,  32,  50],
#       [ 32,  77, 122],
#       [ 50, 122, 194]])

NumPy Broadcasting

Due array dovrebbero avere la stessa forma nell’operazione matematica degli array. Ma NumPy introduce il concetto di broadcasting per riempire automaticamente l’array, se possibile, quando due array non hanno la stessa forma.

Lasciatemi spiegare questo concetto con degli esempi,

import numpy as np
arrayA = np.array([[1, 2, 3],[4, 5, 6],[7, 8, 9]])
arrayA + 1
#array([[ 2,  3,  4],
#       [ 5,  6,  7],
#       [ 8,  9, 10]])

Qui, 1 viene aggiunto a tutti gli elementi di arrayA, o in altre parole, 1 viene trasmesso dalla forma (1, 1) alla stessa forma di arrayA - (3, 3) per rendere possibile l’operazione di aggiunta dell’array.

L’operazione effettiva è la seguente,

arrayA + np.array([[1,1,1],[1,1,1],[1,1,1]])

La radiodiffusione in NumPy potrebbe essere utilizzata anche negli scenari sottostanti,

Due array hanno la stessa lunghezza in una dimensione, e un array ha la lunghezza di 1 nell’altra dimensione

Cominciamo con un esempio,

arrayC = np.array([10, 11, 12])
arrayA + arrayC
#array([[11, 13, 15],
#       [14, 16, 18],
#       [17, 19, 21]])

La forma di arryA è (3, 3) e la forma di arrayC è (3, 1). Soddisfa i criteri delle dimensioni dell’array, e i dati sulla singola riga in arrayC saranno trasmessi su tre righe per corrispondere alla forma di arrayA.

È anche applicabile se due array hanno la stessa lunghezza di riga.

arrayD = np.array([[10],[11],[12]])
#array([[10],
#       [11],
#       [12]])
arrayA + arrayD
#array([[11, 12, 13],
#       [15, 16, 17],
#       [19, 20, 21]])