在两台计算机上计算相同numpy的不同结果

我在win32上有两台带有
python 2.7.2(MSC v.1500 32位(Intel)]和numpy 1.6.1的计算机.

numpy.mean(data)

回报

1.13595094681 on my old computer 

1.13595104218 on my new computer

哪里

Data = [ 0.20227873 -0.02738848  0.59413314  0.88547146  1.26513398  1.21090782
1.62445402  1.80423951  1.58545554  1.26801944  1.22551131  1.16882968
1.19972098  1.41940248  1.75620842  1.28139281  0.91190684  0.83705413
1.19861531  1.30767155]

在这两种情况下

s=0
for n in data[:20]:
  s+=n
print s/20

1.1359509334

任何人都可以解释为什么以及如何避免?

MADS

最佳答案 如果你想避免两者之间的任何差异,那么明确地使它们成为32位或64位浮点数组. NumPy使用其他几个可能是32位或64位的库.请注意,在您的打印语句中也可以进行舍入:

>>> import numpy as np
>>> a = [0.20227873, -0.02738848,  0.59413314,  0.88547146,  1.26513398,
         1.21090782, 1.62445402,  1.80423951,  1.58545554,  1.26801944,
         1.22551131,  1.16882968, 1.19972098,  1.41940248,  1.75620842,
         1.28139281,  0.91190684,  0.83705413, 1.19861531,  1.30767155]
>>> x32 = np.array(a, np.float32)
>>> x64 = np.array(a, np.float64)
>>> x32.mean()
1.135951042175293
>>> x64.mean()
1.1359509335
>>> print x32.mean()
1.13595104218
>>> print x64.mean()
1.1359509335

另一点需要注意的是,如果您有多线程的低级库(例如,atlas,lapack),那么对于大型数组,由于可能的操作顺序和浮点精度,您的结果可能会有所不同. .

此外,您处于32位数的精度限制:

>>> x32.sum()
22.719021
>>> np.array(sorted(x32)).sum()
22.719019
点赞