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的数组时,似乎会发生,尽管就我所知,在其他情况下也可能会发生这种情况。
答案 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