Lassen Sie uns sagen, ich habenp.vectorize und nan - wie kann ich sie schön spielen lassen?
>>> import numpy as np
>>> nv = np.array([-1, np.nan, 1])
np.sin
als
>>> np.sin(nv)
array([-0.84147098, nan, 0.84147098])
jedoch erwartet, wenn ich versuche, dass es mit vectorize auf meine eigene Funktion
>>> def noneg(n):
if n < 0:
return 0
return n
>>> noneg(nv)
...
ValueError: cannot convert float NaN to integer
Dies ist nicht werden, weil Der Initialisierungswert, der von noneg zurückgegeben wird, ist die Ganzzahl Null, und dann erhalten wir nan
, was ein float ist.
Die Lösung, die ich bisher gefunden habe ist:
>>> @np.vectorize
def noneg(n):
if not np.isnan(n) and n < 0:
return n.__class__(0)
return n
>>> noneg(nv)
array([ 0., nan, 1.])
Doch diese hässlich aussieht, gibt es eine bessere Art und Weise nan
in vectorize zu ignorieren?
was ist mit verschachtelten 'np.where'? –
Geben Sie die "otypes" an. Ohne es wird der Rückgabewert 'dtype' durch eine Versuchsrechnung mit dem ersten Wert ermittelt. http://stackoverflow.com/a/41795777/901925 – hpaulj