我在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