我的numpy数组中有一列有一堆long
和一些NaN
s。其中没有其他float
。如果我将整个列转换为float
,我将失去精确度。
如果我没有将整个列转换为float
,我就不能使用像isnan
或isfinite
那样的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''
答案 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]