当dtype是对象时使用numpy函数

时间:2014-02-08 00:40:49

标签: python numpy

我的numpy数组中有一列有一堆long和一些NaN s。其中没有其他float。如果我将整个列转换为float,我将失去精确度。

如果我没有将整个列转换为float,我就不能使用像isnanisfinite那样的numpy函数,因为尽管元素是有效类型,但数组是object类型。

是否有能够使用numpy功能保持精度?

a = np.array([10**50,19**50,float('NaN')])

a
#outputs:
array([100000000000000000000000000000000000000000000000000L,
   8663234049605954426644038200675212212900743262211018069459689001L,
   nan], dtype=object)

np.isnan(a)

#outputs error:

ufunc 'isnan' not supported for the input types, and the inputs could not be safely 
coerced to any supported types according to the casting rule ''safe''

2 个答案:

答案 0 :(得分:4)

In [1760]: np.isnan(a.astype(float))
Out[1760]: array([False, False,  True], dtype=bool)

因此,如果精度不是那么重要,那就是a=a.astype(float)

答案 1 :(得分:0)

可能只是忽略nan s:

ii = np.where([type(a) is long for a in A if type(a)]
B = 5*A[ii]