2012-10-03 46 views
23

¿Hay alguna forma de almacenar NaN en una matriz Numpy de enteros? me sale:Numpy integer 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í, wa no tengo claro si la respuesta no se trata de numpy o pandas. – Yariv

Respuesta

23

No, no puedes, al menos con la versión actual de NumPy. Un nan es un valor especial para matrices flotantes solo.

Se habla de introducir un bit especial que permitiría a los arreglos no flotantes almacenar lo que en la práctica correspondería a un nan, pero hasta ahora (2012/10), solo son conversaciones.

Mientras tanto, es posible que desee considerar el paquete numpy.ma: en lugar de elegir un entero no válido como -99999, puede utilizar el valor especial numpy.ma.masked para representar un valor no válido.

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

¡Pero tenga en cuenta que hay un gran costo de rendimiento para utilizar matrices enmascaradas, ya que se implementan en python puro! – gaborous

4

Un nan es un punto flotante único, no hay representación de la misma en los números enteros, por lo que no :)

selección un valor no válido, como -99999

+3

Seleccionar un valor canónico como no válido no sería una buena solución ya que no replicaría las mismas propiedades que nan, a saber: las comparaciones entre nan y cualquier otro valor, incluido él mismo, deberían ser falsos. – christang