1
亲爱的Python社区,numpy的阵列四舍五入不工作
我想数据点之间插值,但想保持我的结果到3位小数,所以我定义了以下功能:
import numpy
def spline(y, x , xnew):
from scipy import interpolate
model = interpolate.splrep(x,y)
ynew = interpolate.splev(xnew,model)
result = ynew.round(3)
return result
这似乎给我下面的简单示例预期的结果:
x = [1,2,3,4,5,7,10]
y = [1.31,1.883,2.285,2.572,2.809,3.024,3.208]
z = spline(y,x, np.arange(1,11))
其产生预期:
Out[109]:
array([ 1.31 , 1.883, 2.285, 2.572, 2.809, 2.954, 3.024, 3.062,
3.109, 3.208])
但是,当我试图检索一个特定的值时,它似乎不是四舍五入。我该如何解决这个问题?下面我
z[3]
Out[110]: 2.5720000000000001
答案如下尝试:
t= 2.572
t
Out[119]: 2.572
type(t)
Out[120]: float
,所以我不明白为什么现在它可以有完全2.572或者是有一个隐含的3位小数在我的T的高清显示性能?
即已知的任何行为编程语言。发生这种情况是因为十进制数字2.572的确切表示需要无限数字的二进制数字 – nanojohn
因此,'2.5720000000000001'最接近'2.572',可以用Python'float'表示。 – JohanL
你的实际用例是什么?你真的需要它精确到三位小数吗?那么你应该考虑使用'Decimal'类。 – JohanL