Ich muss eine Funktion schreiben, die erkennt, ob die Eingabe mindestens einen nicht numerischen Wert enthält. Wenn ein nicht numerischer Wert gefunden wird, wird ein Fehler ausgegeben (da die Berechnung nur einen numerischen Wert zurückgeben sollte). Die Anzahl der Dimensionen des Eingabearrays ist nicht im Voraus bekannt - die Funktion sollte unabhängig von ndim den richtigen Wert liefern. Als zusätzliche Komplikation könnte die Eingabe ein einzelner Float numpy.float64
oder sogar etwas Seltsames wie ein nulldimensionales Array sein.
Die naheliegende Möglichkeit, dies zu lösen, besteht darin, eine rekursive Funktion zu schreiben, die über jedes iterierbare Objekt im Array iteriert, bis ein Nicht-Iterabe gefunden wird. Die numpy.isnan()
Funktion wird auf jedes nicht iterierbare Objekt angewendet. Wenn mindestens ein nicht numerischer Wert gefunden wird, gibt die Funktion sofort False zurück. Andernfalls wird, wenn alle Werte in der Iterable numerisch sind, schließlich True zurückgegeben.
Das funktioniert gut, aber es ist ziemlich langsam und ich gehe davon aus, dass NumPy einen viel besseren Weg hat, dies zu tun. Was ist eine Alternative, die schneller und numpyischer ist?
Hier ist mein Modell:
def contains_nan( myarray ):
"""
@param myarray : An n-dimensional array or a single float
@type myarray : numpy.ndarray, numpy.array, float
@returns: bool
Returns true if myarray is numeric or only contains numeric values.
Returns false if at least one non-numeric value exists
Not-A-Number is given by the numpy.isnan() function.
"""
return True
array(['None', 'None'], dtype=object)
? Sollte eine solche Eingabe nur eine Ausnahme auslösen?
float('nan') in x
. Es funktioniert nicht.
contains_nan
sieht verdächtig aus: "Gibt false zurück, wenn mindestens ein nicht numerischer Wert vorhanden ist". Ich hätte erwartetcontains_nan
zurückzukehren,True
wenn das Array NaN enthält.