ho cercato di vettorizzare (concordato, non è il modo più efficace per farlo, ma la mia domanda è piuttosto sull'uso decoratore) la seguente funzioneNumpy vectorize come decoratore con argomenti
@np.vectorize
def diff_if_bigger(x, y):
return y - x if y > x else 0
x = np.array([5.6, 7.0])
y = 8
diff_if_bigger(x, y)
# outputs array([2, 1]) which is not what I want
EDIT: Dopo aver riavviato IPython, l'output era OK.
qualcuno può spiegare il motivo per cui il risultato di diff_if_bigger
ottenuto tansformed in un array di np.int
, anche se il primo argomento x è qui un aray di np.float
, contrariamente a ciò che è nel doc ????
Ora, voglio forzare un'uscita galleggiante, così ho fatto questo
@np.vectorize('np.float')
def diff_if_bigger(x, y):
return y - x if y > x else 0
# Error !!
# TypeError: Object is not callable.
@np.vectorize(otypes='np.float')
def diff_if_bigger(x, y):
return y - x if y > x else 0
# Again error !!
# TypeError: __init__() takes at least 2 arguments (2 given)
@np.vectorize(otypes=[np.float])
def diff_if_bigger(x, y):
return y - x if y > x else 0
# Still an error !!
# TypeError: __init__() takes at least 2 arguments (2 given)
Tra l'altro, anche questo
vec_diff = np.vectorize(diff_if_bigger, otypes=[np.float])
non funziona !!! Quindi cosa sta succedendo ??
EDIT: In effetti, quest'ultimo ha funzionato dopo il riavvio di IPython.
Così, dopo i miei due precedenti modifiche, la mia domanda è ora duplice:
1- Come posso usare np.vectorize come decoratore con argomenti?
2- Come posso pulire lo stato di IPython?
@seberg, no, stai dicendo sciocchezze .. –
Guarda, davvero non rispondi in modo specifico a nessuna delle mie domande .. Hai mai provato a eseguire i bit di codice che ho postato ??? Hai guardato l'aiuto vectorize ?? –
Siamo spiacenti, ma forse dovresti fornire descrizioni degli errori migliori, è un po 'difficile da diagnosticare in questo modo. 1. Tutti i tuoi esempi funzionano effettivamente (ma quelli decoratori danno un tipo, che non può). 2. Il tuo primo esempio potrebbe fallire, se hai dato un input diverso prima di quell'input. 3. L'ultima chiamata vettoriale su una funzione che è già vettorizzata non ha senso, quindi forse questo è il tuo inquietante "non funziona". – seberg