首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在numpy的全封闭功能中,rtol是干什么的?

在numpy的全封闭功能中,rtol是干什么的?
EN

Stack Overflow用户
提问于 2021-01-26 21:56:44
回答 2查看 3.9K关注 0票数 13

numpy.allclose()中,有两个容差因子用来确定两个数组是否足够接近,可以计算为相同的值。有相对容差rtol和绝对容差atol。来自医生们

代码语言:javascript
运行
复制
numpy.allclose(a, b, rtol=1e-05, atol=1e-08)

也来自文档:

如果下面的方程是按元素排列的True,那么allclose返回True。 绝对(A) <= (atol + rtol *绝对( b) )

从数学上讲,我理解这一点,但我对rtol的意义感到困惑。为什么不只使用单个公差值tol,如果是|a-b| < tol,则返回False?显然,按照上面的公式,我可以手动地将rtol设置为零,从而使一切都是对称的。对称破缺rtol因子的意义是什么?

相关问题

()有多接近?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-01-26 22:02:28

令人困惑的是,方程显示了同时使用的两个参数。相反,你可以这样看:

  • (**atol**)absolute(a - b) <= atol绝对耐受性Usecase 1
  • (**rtol**)absolute(a - b) <= rtol * absolute(b)相对耐受性Usecase 2

使用单个公差参数实现这两种情况的另一种方法是添加一个标志,该标志确定toerance是相对的还是绝对的。在usecase中分离这种用例,其中数组值可以是大的,也可以是零的。如果只有一个数组可以有零,那么将其设为a,并使用不对称的方程,而不使用atol。如果任何一个都可以有零,只需将rtol设置为大元素的一些可接受的值,并将atol设置为要为零启动的值。

您通常希望使用rtol:由于数字和计算的精度是非常有限的,所以较大的数字几乎总是比较小的数字更不精确,并且差分标度是线性的(同样,一般情况下)。您唯一使用atol的是接近于零的数字,以至于舍入误差很可能大于数字本身。

另一种看法是atol比较固定的小数位,而rtol则比较重要的数字。

票数 14
EN

Stack Overflow用户

发布于 2021-01-26 22:03:02

使用哪种容忍度取决于您的问题陈述。例如,如果我的数组的值范围很广,从1e-10到1e10不等,该怎么办?小型atol对于小值很好,但对于大值则不太好,而对于大型atol则相反。但是在这种情况下,rtol是完美的,因为我可以指定可接受的增量应该与每个值一起伸缩。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65909842

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档