Numpy数组舍入不起作用

时间:2017-07-27 16:50:38

标签: python numpy rounding

亲爱的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位小数显示属性?

1 个答案:

答案 0 :(得分:0)

这是任何编程语言的已知行为。这是因为十进制数2.572的精确表示需要无限数量的二进制数字

如果您只想显示3位小数,可以使用str.format()功能:

'{0:.3f}'.format(z[3])