web-dev-qa-db-fra.com

Numpy entier nan

Existe-t-il un moyen de stocker NaN dans un tableau Numpy d'entiers? Je reçois:

a=np.array([1],dtype=long)
a[0]=np.nan

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: cannot convert float NaN to integer
42
Yariv

Non, vous ne pouvez pas, du moins avec la version actuelle de NumPy. Un nan est une valeur spéciale pour les tableaux flottants uniquement .

Il y a des discussions sur l'introduction d'un bit spécial qui permettrait aux tableaux non flottants de stocker ce qui correspondrait en pratique à un nan, mais jusqu'à présent (2012/10), ce ne sont que des discussions.

En attendant, vous voudrez peut-être considérer les numpy.ma package: au lieu de choisir un entier non valide comme -99999, vous pouvez utiliser le spécial numpy.ma.masked valeur pour représenter une valeur non valide.

a = np.ma.array([1,2,3,4,5], dtype=int)
a[1] = np.ma.masked
masked_array(data = [1 -- 3 4 5],
             mask = [False  True False False False],
       fill_value = 999999)
34
Pierre GM

Un nan n'est qu'une chose en virgule flottante, il n'y a aucune représentation de celui-ci dans les entiers, donc non :)

Choisissez une valeur non valide, comme -99999

6
Julian