Is there a way to store NaN in a Numpy array of integers? I get:
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
No, you can't, at least with current version of NumPy. A nan is a special value for float arrays only.
There are talks about introducing a special bit that would allow non-float arrays to store what in practice would correspond to a nan, but so far (2012/10), it's only talks.
In the meantime, you may want to consider the numpy.ma package: instead of picking an invalid integer like -99999, you could use the special numpy.ma.masked value to represent an invalid value.
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)
nan and null are not the same thing. Also, while it is not a direct substitute for numpy, cuDF does support nulls.A nan is a floating point only thing, there is no representation of it in the integers, so no :)
Pick an invalid value, like -99999
>= 0, then using a negative sentinel is acceptable (unless you're doing an operation where the outcome could have a different sign than the input, such as -1 * -1). If you're writing a framework and end up using sentinels, you should probably allow that value to be chosen by the user on an individual operation basis. Again, not ideal.NaN or missing object should have been...