Scipy Shift功能丧失精度

时间:2019-02-18 05:17:35

标签: python numpy scipy

from scipy.ndimage.interpolation import shift
a = np.array([0., 1.])
shift_left = shift(a, -1, cval=np.NaN)
shift_right = shift(a, 1, cval=np.NaN)
print(shift_left)
print(shift_right)

这是上面代码的结果

[ 1. nan]
[ nan -8.32667268e-17]

这就是我期望的结果

[ 1. nan]
[ nan 0.]

是否有这种精度损失的原因?有谁知道可能导致此问题的原因以及我该如何解决?当我移动包含值0的数组时,似乎会发生,尽管就我所知,在其他情况下也可能会发生这种情况。

1 个答案:

答案 0 :(得分:1)

您获得的数字-8.32667268e-17小于float64类型的(负数)machine epsilon。处理浮点数的算法有望获得类似的结果。您可以将所有小于机器epsilon的值设置为移位后的零:

def eps2zero(x, dtype=np.float64):
    """ this sets values < eps to zero in-place """
    x[np.abs(x) < np.finfo(dtype).eps] = 0