📢 Nuovo Corso Bootstrap Completo disponibile!

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:

  1. Una funzione Python che eseguirà l’operazione desiderata sugli elementi degli array.
  2. 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 personalizzata
def quadrato(x):
return x * x
# Creazione di una ufunc personalizzata
ufunc_quadrato = np.frompyfunc(quadrato, 1, 1)
# Utilizzo della ufunc personalizzata
array = 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 personalizzata
def quadrato(x):
return x * x
# Creazione di una ufunc personalizzata
ufunc_quadrato = np.frompyfunc(quadrato, 1, 1)
# Verifica se è una ufunc
if 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.