HOWTO · NumPy
NumPy Fattoriale
Scopri come calcolare il fattoriale degli elementi di un array NumPy usando la funzione special.factorial() di SciPy in Python, con esempi di codice e spiegazioni dei risultati, incluso perché i valori vengono restituiti come numeri in virgola mobile e come richiedere invece risultati interi esatti.
In questa pagina
Calcolare il fattoriale dei numeri è un compito comune in matematica e programmazione, specialmente in campi come la statistica e la combinatoria. In Python, possiamo calcolare il fattoriale degli elementi di un array NumPy usando la funzione special.factorial() della libreria SciPy.
Questa funzione esegue il calcolo elemento per elemento su un array. Che tu lavori con un piccolo insieme di numeri o con un array di grandi dimensioni, la stessa chiamata applica il fattoriale a ogni elemento contemporaneamente.
In questo articolo, esploreremo come usare la funzione special.factorial(), fornendo esempi chiari e spiegazioni per aiutarti a cogliere questo concetto essenziale.
Che cos’è un fattoriale?
Prima di immergerci nel codice, è fondamentale capire che cos’è un fattoriale. Il fattoriale di un intero non negativo n, denotato come n!, è il prodotto di tutti gli interi positivi minori o uguali a n. Ad esempio, 5! è uguale a 5 × 4 × 3 × 2 × 1, che è uguale a 120. I fattoriali sono ampiamente usati nelle permutazioni, nelle combinazioni e in altri calcoli matematici.
Nella programmazione, i fattoriali sono spesso necessari per ogni elemento di un array contemporaneamente. È qui che entrano in gioco NumPy e SciPy: special.factorial() applica l’operazione elemento per elemento su un array.
Usare la funzione special.factorial() di SciPy
La funzione special.factorial() della libreria SciPy è progettata per calcolare il fattoriale di ciascun elemento di un array. Esegue l’operazione elemento per elemento, quindi una sola chiamata gestisce un array di qualsiasi dimensione.
Per usare questa funzione, devi prima installare la libreria SciPy se non l’hai già fatto. Puoi farlo usando pip:
pip install scipy
Una volta installato SciPy, puoi iniziare a usare la funzione special.factorial(). Di seguito è riportato un semplice esempio per dimostrare come calcolare il fattoriale di un array di numeri interi.
import numpy as np
from scipy import special
arr = np.array([0, 1, 2, 3, 4, 5])
factorials = special.factorial(arr)
print(factorials)
Output:
[ 1. 1. 2. 6. 24. 120.]
In questo esempio, importiamo prima le librerie necessarie: NumPy e il modulo special di SciPy. Creiamo un array NumPy contenente numeri interi da 0 a 5. Passando questo array alla funzione special.factorial(), otteniamo i fattoriali di questi numeri. L’output mostra i rispettivi fattoriali come numeri in virgola mobile, che è il comportamento predefinito della funzione.
Calcolare fattoriali per array di grandi dimensioni
La stessa chiamata funziona invariata per array più grandi.
Diamo un’occhiata a un esempio in cui calcoliamo il fattoriale per un intervallo più ampio di numeri.
large_arr = np.arange(10, 21) # Array from 10 to 20
large_factorials = special.factorial(large_arr)
print(large_factorials)
Output:
[3.62880000e+06 3.99168000e+07 4.79001600e+08 6.22702080e+09
8.71782912e+10 1.30767437e+12 2.09227899e+13 3.55687428e+14
6.40237371e+15 1.21645100e+17 2.43290201e+18]
In questo caso, creiamo un array contenente numeri interi da 10 a 20 usando np.arange(). La funzione special.factorial() calcola il fattoriale per ciascun elemento di questo array, senza la necessità di scrivere un ciclo. L’output viene visualizzato in notazione scientifica a causa delle grandi dimensioni dei numeri.
Perché i risultati sono numeri in virgola mobile
Guarda di nuovo gli output sopra: i fattoriali tornano come numeri in virgola mobile — 120. invece di 120, e i risultati più grandi in notazione scientifica. Questo è il comportamento predefinito di special.factorial(): restituisce i suoi risultati come valori in virgola mobile, anche quando ogni input è un intero.
I numeri in virgola mobile hanno una precisione limitata, quindi per fattoriali molto grandi il valore restituito è il numero in virgola mobile rappresentabile più vicino piuttosto che l’intero esatto. Se hai bisogno di risultati interi esatti, passa exact=True:
arr = np.array([0, 1, 2, 3, 4, 5])
exact_factorials = special.factorial(arr, exact=True)
print(exact_factorials)
Output:
[ 1 1 2 6 24 120]
Con exact=True, gli stessi input restituiscono numeri interi senza punto decimale, come mostra l’output. Scegli la forma predefinita quando i risultati in virgola mobile sono accettabili per il tuo calcolo, e la forma esatta quando conta il valore intero preciso.
Conclusione
In sintesi, la funzione special.factorial() della libreria SciPy calcola i fattoriali elemento per elemento su un array NumPy in Python. Che tu lavori con un array piccolo o grande, si applica la stessa chiamata, e i risultati tornano come numeri in virgola mobile per impostazione predefinita, con risultati interi esatti disponibili passando exact=True. Capire come calcolare i fattoriali non solo aiuta nei calcoli matematici, ma apre anche le porte a argomenti più avanzati in statistica e scienza dei dati.
FAQ
-
Qual è il fattoriale di un numero?
Il fattoriale di un intero non negativo n è il prodotto di tutti gli interi positivi minori o uguali a n, denotato come n!. -
Come installo SciPy?
Puoi installare SciPy usando pip con il comando pip install scipy. -
Perché i risultati sono mostrati come numeri in virgola mobile?
Per impostazione predefinita, la funzione special.factorial() restituisce valori in virgola mobile, anche per input interi, quindi i risultati grandi vengono stampati in notazione scientifica. -
Come posso ottenere invece fattoriali interi esatti?
Passa exact=True alla funzione special.factorial(), come mostrato nella sezione sulla virgola mobile sopra. -
Quale formato di output restituisce special.factorial()?
L’output viene restituito come numeri in virgola mobile per impostazione predefinita.