2012-10-03 17 views
23

C'è un modo per memorizzare NaN in un array Numpy di numeri interi? ottengo:Numpy intero nan

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 
+0

@ tpg2114, sì, non è chiaro per me se la risposta è circa numpy o panda. – Yariv

risposta

23

No, non puoi, almeno con la versione corrente di NumPy. A nan è un valore speciale per gli array mobili solo.

Ci sono discussioni sull'introduzione di un bit speciale che consentirebbe agli array non-float di archiviare quello che in pratica corrisponderebbe a un nan, ma finora (2012/10), è solo una chiacchierata.

Nel frattempo, è possibile prendere in considerazione il pacchetto numpy.ma: invece di selezionare un numero intero non valido come -99999, è possibile utilizzare il valore speciale numpy.ma.masked per rappresentare un valore non valido.

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) 
+4

Ma sappi che c'è un enorme costo in termini di prestazioni per utilizzare gli array mascherati mentre vengono implementati in puro python! – gaborous

4

Un nan è una virgola mobile unica cosa, non v'è alcuna rappresentazione in numeri interi, in modo che nessuno :)

scegliere un valore non valido, come -99999

+3

Scegliere un valore canonico come non valido non sarebbe una buona soluzione poiché non replicherebbe le stesse proprietà di nan, ovvero: i confronti tra nan e qualsiasi altro valore compreso se stesso dovrebbero essere falsi. – christang

Problemi correlati