亲爱的Python社区,
我正在尝试在数据点之间进行插值,但希望将结果保持为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或者在我的t定义中是否存在隐含的3位小数显示属性?
答案 0 :(得分:0)
这是任何编程语言的已知行为。这是因为十进制数2.572的精确表示需要无限数量的二进制数字
如果您只想显示3位小数,可以使用str.format()
功能:
'{0:.3f}'.format(z[3])