我有以下两个函数:
def loop(x):
a = np.zeros(10)
for i1 in range(10):
for i2 in range(10):
a[i1] += np.sin(x[i2] - x[i1])
return a
并且
def vectorized(x):
b = np.zeros(10)
for i1 in range(10):
b += np.sin(np.roll(x, i1) - x)
return b
然而,当我运行这两个时,发现它们的结果略有不同:
x = np.arange(10)
a, b = loop(x), vectorized(x)
print b - a
我收到:
[ 2.22044605e-16 0.00000000e+00 0.00000000e+00 6.66133815e-16
-2.22044605e-16 2.22044605e-16 0.00000000e+00 2.22044605e-16
2.22044605e-16 2.22044605e-16]
这个问题很小,但在我的情况下会影响模拟。如果我从函数中删除np.sin,则差异消失。或者,如果使用np.float32代替x,差异也会消失,但这是由float64解决器求解的ode的一部分。有没有办法解决这个差异?