我在使用np.round,np.around时遇到了一个问题,它没有正确舍入,我不能包含代码,因为当我手动设置值时(与使用my data相反),返回值有效,但下面是输出:
In [177]: a Out[177]: 0.0099999998 In [178]: np.round(a,2) Out[178]: 0.0099999998 In [179]: np.round(a,1) Out[179]: 0.0
我漏掉了什么?a的dtype是float32,我需要修改吗?
mcvgt66p1#
尝试创建np.float32(0.01),您将看到您的答案。您正在获得您已经可以获得的精度。
np.float32(0.01)
>>> import numpy as np >>> x = 0.01 >>> epsilon = 0.01 - np.float32(0.01) >>> for n in np.arange(x - 10*epsilon, x + 10*epsilon, epsilon): ... print(repr(np.float32(n))) ... 0.0099999979 0.0099999979 0.0099999979 0.0099999988 0.0099999988 0.0099999988 0.0099999988 0.0099999998 0.0099999998 0.0099999998 0.0099999998 0.0099999998 0.010000001 0.010000001 0.010000001 0.010000001 0.010000002 0.010000002 0.010000002 0.010000002
ee7vknir2#
注意,python的round函数和numpy.float64类型似乎有问题,见下例:
round
numpy.float64
In [88]: round(np.float64(16.259766999999947), 4) Out[88]: 16.259799999999998
我唯一能解决这个问题的方法是在使用round函数之前将numpy.float64转换为float,如下所示:
In [89]: round(float(np.float64(16.259766999999947)), 4) Out[89]: 16.2598
bkhjykvo3#
如果数字是python的float或np.float64,它就不起作用。一旦我把数字改为np.float32(),它就工作了!type(85.10000000000001), np.round(85.10000000000001,decimals=2), np.round(np.float32(85.10000000000001),decimals=2)结果:(浮点数,85.1000000000001,85.1)
type(85.10000000000001), np.round(85.10000000000001,decimals=2), np.round(np.float32(85.10000000000001),decimals=2)
3条答案
按热度按时间mcvgt66p1#
尝试创建
np.float32(0.01)
,您将看到您的答案。您正在获得您已经可以获得的精度。ee7vknir2#
注意,python的
round
函数和numpy.float64
类型似乎有问题,见下例:我唯一能解决这个问题的方法是在使用round函数之前将
numpy.float64
转换为float,如下所示:bkhjykvo3#
如果数字是python的float或np.float64,它就不起作用。
一旦我把数字改为np.float32(),它就工作了!
type(85.10000000000001), np.round(85.10000000000001,decimals=2), np.round(np.float32(85.10000000000001),decimals=2)
结果:(浮点数,85.1000000000001,85.1)