我能在类似python的matlab中得到完全相同的和输出吗



我正在将matlab代码转换为python。我发现matlab和python的总和有一个奇怪的区别。我想在python中得到和在matlab中相同的输出。有可能吗?在matlab中

x = [-200:200]/200;  % 401 values from -200 to 200
y =sum(x)
y = 9.9920e-16

但在使用不同模块的python中,我得到了答案

x = np.arange(-200,201)/200 # 401 values from -200 to 200
y = np.sum(x)
y = 1.4210854715202004e-14
z = sum(x)
z = -8.43769498715119e-15
zmath = math.fsum(x)
zmath = 0.0

区别不在于数字表示,而在于求和的顺序。你可以在Matlab:中看到这一点

>> sum(x(randperm(401)))
ans =
2.7756e-16
>> sum(x(randperm(401)))
ans =
5.8842e-15
>> sum(x(randperm(401)))
ans =
-2.2204e-15

求和的顺序将取决于实现细节,例如,数组操作是否利用了CPU的矢量寄存器。如果必须得到完全相同的结果,则必须编写一个显式循环。(根据您得到的答案,Python中的z = sum(x)在内部这样做。(有关发生这种情况的更多理解,请参阅为什么更改和顺序会返回不同的结果?

相关内容

  • 没有找到相关文章

最新更新