NumPy Tutorial - NumPy Math Operation and 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]])
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook