web-dev-qa-db-fra.com

La fonctionnalité "isnotnan" dans numpy, cela peut-il être plus pythonique?

J'ai besoin d'une fonction qui renvoie des valeurs non NaN à partir d'un tableau. Actuellement, je le fais de cette façon:

>>> a = np.array([np.nan, 1, 2])
>>> a
array([ NaN,   1.,   2.])

>>> np.invert(np.isnan(a))
array([False,  True,  True], dtype=bool)

>>> a[np.invert(np.isnan(a))]
array([ 1.,  2.])

Python: 2.6.4 numpy: 1.3.0

Veuillez partager si vous connaissez une meilleure façon, merci

58
a = a[~np.isnan(a)]
109
mtrw

Vous testez actuellement tout ce qui n'est pas NaN et mtrw a la bonne façon de le faire. Si vous êtes intéressé à tester des nombres finis (ce n'est pas NaN et ce n'est pas INF), vous n'avez pas besoin d'une inversion et vous pouvez utiliser:

np.isfinite(a)

Plus Pythonic et natif, une lecture facile, et souvent lorsque vous voulez éviter NaN, vous voulez également éviter INF selon mon expérience.

Je pensais juste que je jetterais ça là-bas pour les gens.

35
Ezekiel Kruglick