NumPy Tutorial - NumPy Math Operation and Broadcasting

Jinku Hu 30 marzo 2021
  1. Operazione aritmetica NumPy
  2. NumPy Broadcasting
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]])
Autore: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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