【发布时间】:2016-09-11 08:39:26
【问题描述】:
[Python numpy 代码]
In [171]: A1*b
Out[171]:
array([ -7.55603523e-01, 7.18519356e-01, 3.98628050e-03,
9.27047917e-04, -1.31074698e-03, 1.44455190e-03,
1.02676602e-03, 5.03891225e-02, -1.15752426e-03,
-2.43685270e-02, 5.88382307e-03, 2.63372861e-04])
In [172]: (A1*b).sum()
Out[172]: -1.6702134467139196e-16
[R码]
> cholcholT[2,] * b
[1] -0.7556035225 0.7185193560 0.0039862805 0.0009270479 -0.0013107470
[6] 0.0014445519 0.0010267660 0.0503891225 -0.0011575243 -0.0243685270
[11] 0.0058838231 0.0002633729
> sum(cholcholT[2,] * b)
[1] -9.616873e-17
第一个是R代码,第二个是numpy。直到两个向量的元素乘积,它们返回相同的结果。但是,如果我尝试将它们加起来,它们就会变得不同。我相信这与两者的精度设置无关,因为它们都是基于双精度的。为什么会这样?
【问题讨论】:
-
请不要发布图片来分享数据或代码。
-
哦,天哪……这些数字太小了……你不能指望两个不同的系统返回完全相同的数字,直到第 16 位!
-
@digEmAll 所以这是自然的?!
-
@DaeyoungLim:您应该将这些结果都视为零(1*10^-16 基本上为零)。 python 和 R 都使用浮点精度,即使它们执行相同的操作,内部操作的顺序也可能略有不同,这可能导致非常小的差异(即使在数学上它们是相等的)。这是一个很好的例子,说明浮点数学是如何不是完美:
if(0.1+0.1+0.1 != 0.3) print('OMG !') -
如何也发布输入。