Creare Ufunc NumPy
In NumPy, è possibile creare le proprie Funzioni Universali (ufunc) personalizzate. Questo offre un alto livello di flessibilità per eseguire operazioni personalizzate su array NumPy in modo efficiente. Ecco come puoi creare la tua ufunc personalizzata e verificare se è una ufunc.
Creare una Ufunc Personalizzata
Per creare una ufunc personalizzata in NumPy, è necessario utilizzare la funzione numpy.frompyfunc()
. Questa funzione accetta due argomenti principali:
- Una funzione Python che eseguirà l’operazione desiderata sugli elementi degli array.
- Il numero di input e output della ufunc.
Ecco un esempio di come creare una ufunc personalizzata che eleva un numero al quadrato:
import numpy as np
# Definizione di una funzione personalizzatadef quadrato(x): return x * x
# Creazione di una ufunc personalizzataufunc_quadrato = np.frompyfunc(quadrato, 1, 1)
# Utilizzo della ufunc personalizzataarray = np.array([1, 2, 3, 4, 5])risultato = ufunc_quadrato(array)
print(risultato)
In questo esempio, abbiamo definito la funzione quadrato()
che calcola il quadrato di un numero. Successivamente, abbiamo creato una ufunc personalizzata ufunc_quadrato
utilizzando np.frompyfunc()
con 1 input e 1 output. Infine, abbiamo applicato la ufunc al nostro array NumPy array
per ottenere il quadrato di ciascun elemento.
Verificare se è una Ufunc
Per verificare se una funzione è una ufunc, puoi utilizzare il modulo numpy
per verificarne il tipo. Le ufunc hanno il tipo numpy.ufunc
. Ecco un esempio di come farlo:
import numpy as np
# Definizione di una funzione personalizzatadef quadrato(x): return x * x
# Creazione di una ufunc personalizzataufunc_quadrato = np.frompyfunc(quadrato, 1, 1)
# Verifica se è una ufuncif isinstance(ufunc_quadrato, np.ufunc): print("È una ufunc.")else: print("Non è una ufunc.")
In questo esempio, verifichiamo se ufunc_quadrato
è una ufunc utilizzando isinstance()
e np.ufunc
.
Creare ufunc personalizzate può essere utile quando si desidera eseguire operazioni complesse o personalizzate su array NumPy in modo efficiente e vettorializzato.