小编pat*_*pon的帖子

矢量化代码与numpy中的标准循环的结果不同

我有以下两个功能:

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
Run Code Online (Sandbox Code Playgroud)

def vectorized(x):    
    b = np.zeros(10)
    for i1 in range(10):
        b += np.sin(np.roll(x, i1) - x)
    return b
Run Code Online (Sandbox Code Playgroud)

但是,当我同时运行时,我发现它们的结果略有不同:

x = np.arange(10)
a, b = loop(x), vectorized(x)
print b - a
Run Code Online (Sandbox Code Playgroud)

我明白了:

[  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]
Run Code Online (Sandbox Code Playgroud)

这是非常小的,但在我的情况下,影响模拟.如果我从函数中删除np.sin,差异就会消失.或者,如果对x使用np.float32,差异也会消失,但这是使用float64的解算器解决的ode的一部分.有没有办法解决这个差异?

python numpy python-2.7

9
推荐指数
1
解决办法
216
查看次数

标签 统计

numpy ×1

python ×1

python-2.7 ×1