HOWTO · NumPy

Moltiplica array con scalare in Python

Per moltiplicare gli elementi di un array per uno scalare in Python, puoi usare l’operatore `*` oppure la funzione `numpy.multiply()` del pacchetto NumPy.

In questa pagina

Per moltiplicare ogni elemento di un array NumPy per uno scalare in Python, usa l’operatore * oppure numpy.multiply(). Entrambe le forme eseguono una moltiplicazione elemento per elemento e restituiscono un array con i prodotti corrispondenti. Gli esempi seguenti mostrano ciascuna forma con il relativo output osservato.

Moltiplicare un array NumPy per uno scalare con *

Usa * quando vuoi che l’espressione assomigli a una normale operazione aritmetica. NumPy applica lo scalare a ogni elemento dell’array, quindi l’operazione non richiede un ciclo nel codice Python. La variabile result riceve l’array calcolato, mentre values resta disponibile per i calcoli successivi.

Esegui questo esempio autonomo in un ambiente in cui è installato NumPy:

Il codice e le etichette o gli output visibili in questa sezione restano in inglese.

import numpy as np

values = np.array([2, 4, 6])
scale = 3
result = values * scale
print(result)

Output osservato:

[ 6 12 18]

Con l’array [2, 4, 6] e lo scalare 3, i prodotti elemento per elemento osservati sono 6, 12 e 18. NumPy visualizza questo array di interi con spazi che allineano i valori a una cifra. La stessa espressione funziona con valori interi o in virgola mobile; il dtype del risultato segue le regole aritmetiche e di promozione dei tipi di NumPy.

Moltiplicare un array NumPy per uno scalare con numpy.multiply()

Chiama numpy.multiply(array, scalar) quando indicare esplicitamente l’operazione rende il codice più chiaro o facile da comporre. La funzione riceve l’array e lo scalare come due operandi ed esegue, per questo caso, la stessa moltiplicazione elemento per elemento di *. Esegui questo secondo esempio autonomo in un ambiente in cui è installato NumPy:

Il codice e le etichette o gli output visibili in questa sezione restano in inglese.

import numpy as np

values = np.array([1.5, 2.0, 4.5])
scale = 2
result = np.multiply(values, scale)
print(result)

Output osservato:

[3. 4. 9.]

Qui ogni valore viene moltiplicato per 2 e l’output osservato è [3. 4. 9.]. NumPy stampa questi valori in virgola mobile senza uno zero finale. Entrambi gli esempi assegnano il risultato a una nuova variabile, senza modificare sul posto l’array originale. Se vuoi conservare i valori originali, continua a usare values; se preferisci un flusso di lavoro diverso, assegna deliberatamente il risultato alla variabile originale.

Scegliere tra * e numpy.multiply()

Per moltiplicare un array per uno scalare, scegli la forma che rende più chiaro il codice circostante. L’operatore * è conciso e familiare in un’espressione aritmetica. numpy.multiply() rende esplicita l’operazione tramite una chiamata di funzione. In questo caso nessuna delle due forme offre un vantaggio particolare per il broadcasting: entrambe seguono le regole di moltiplicazione elemento per elemento di NumPy.

Uno scalare può essere distribuito sull’array perché può essere applicato a ogni elemento. Più in generale, NumPy può combinare array di forme diverse quando le dimensioni sono compatibili secondo le regole di broadcasting. Confrontando le dimensioni da destra, queste sono compatibili se sono uguali oppure se una delle due è 1; le dimensioni iniziali mancanti vengono considerate pari a 1. Consulta la guida al broadcasting di NumPy per le regole complete e altri esempi. Per esempio, un array (2, 3) può essere moltiplicato elemento per elemento per un array (3,), perché quest’ultimo si allinea con l’ultima dimensione. Le forme che non rispettano queste regole di compatibilità non possono essere moltiplicate elemento per elemento in questo modo. Il broadcasting non rende compatibili forme arbitrarie.

Queste operazioni producono prodotti elemento per elemento, ma non eseguono una moltiplicazione matriciale. Per moltiplicare uno scalare per i valori dell’array, usa values * scale oppure numpy.multiply(values, scale), quindi esamina o utilizza l’array restituito secondo necessità.