Python + numpy:相同的代码,不同的数值结果

时间:2016-11-01 03:01:36

标签: python numpy scientific-computing reproducible-research

我发现了一些我很好奇的非常有趣的行为。最终,为了科学计算的原因,我希望代码完全可以重现。

无论如何,这里有一段带输出的代码片段。正如您所看到的,相同的计算会导致稍微不同的结果。

np.random.seed(0)
x = np.random.randn(100)
P = np.random.randn(100, 100)

for i in range(10):
    a1 = P.dot(x)
    a2 = P.dot(x)
    b1 = x.dot(a1)
    b2 = x.dot(a2)
    if b1 != b2:
        break

print 'i = {}'.format(i)
print np.abs(a1 - a2).max()
print np.abs(b1 - b2)
print b2

这是输出:

i = 1
0.0
1.7763568394e-15
-10.2398857939

我的两个变量xP只是1d和2d numpy数组。然而,不知何故,相同的简单计算给出了不同的结果。此外,在循环的不同迭代中,未能给出相同结果的试验会有所不同。在这种情况下,例如,i = 0试用版没有问题,但计算无法为i = 1提供相同的结果。

有趣的是,如果我不在a1a2中保存中间值,那么结果是相同的:

for i in range(10000):
    b1 = x.dot(P.dot(x))
    b2 = x.dot(P.dot(x))
    if b1 != b2:
        break

print 'i = {}'.format(i)
print np.abs(b1 - b2)

输出:

i = 9999
0.0

知道这里发生了什么吗?

0 个答案:

没有答案