当前位置: 首页 > 知识库问答 >
问题:

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

颜霖
2023-03-14

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

共有1个答案

申辉
2023-03-14

区别不是数字表示,而是求和的顺序。您可以在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)在内部执行此操作。)有关为什么会发生这种情况的更多理解,请参见为什么更改求和顺序会返回不同的结果?

 类似资料:
  • 问题内容: 我最近从切换到。在转换我冗长的代码之一时,我很惊讶地发现运行速度很慢。我用一个耗时的功能来分析和跟踪问题。我的代码中的各个位置都正在调用此函数(是其他递归调用的函数的一部分)。Profiler建议在和中都对该函数进行 300次 调用。 简而言之,以下代码总结了当前的问题: 包含函数的类: 和调用test.m的脚本: 给出输出 包含函数CustomKernels.py的类: 和调用tes

  • 我对使用此处描述的“舍入半偶数”对大十进制数进行舍入有问题。 我想四舍五入到小数点后两位: 输出: 23.87 但是数字是偶数,所以它应该是23.86还是不是?

  • 我写了一段代码,对给定的输入进行排序,但在返回排序后的输入后,它将始终返回相同的输出。我正在使用创建控制台应用程序。Visual Studio中的NET 5.0(当前版本)。 当我输入“Car-Apple-Banana”时,它会按单词排序。排序() 之后,我打印出原始输入,但它似乎也被排序。我不知道为什么,因为我从不分类。 当输入为:“汽车苹果香蕉” 我现在得到的输出是: 苹果香蕉车 苹果香蕉车

  • 问题内容: 是 与…相同 ? 如果没有,请纠正我。 问题答案: 不它不是。的设置的请求 报头 。对于HTTP请求,您可以在此处找到所有可能的标头。 在刚刚写入请求 体 。如果内容采用urlencode编码,通常会将查询字符串写到请求正文中,而不是像那样将其附加到请求URI上。 就是说,在HTTP URI的情况下,已经隐式地将request方法设置为(因为隐式要求将其写入请求主体),因此无需执行后续

  • 但是,testCase2不处理异常并引发错误。我是不是漏掉了什么?抱歉,我是新手。

  • 本文向大家介绍python在不同条件下的输入与输出,包括了python在不同条件下的输入与输出的使用技巧和注意事项,需要的朋友参考一下 1. 用户输入内容与打印 输入:input() 输出:print() 例1,输入字符串,并原样输出 例2,输入字符串,并判断是否是回文,打印结果 2. 文件创建、读写 打开文件:f = open('文件名', '打开模式') 读取:f.read()、f.readl