在numpy.allclose()
中,有两个容差因子用来确定两个数组是否足够接近,可以计算为相同的值。有相对容差rtol
和绝对容差atol
。来自医生们
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
因子的意义是什么?
相关问题
发布于 2021-01-26 22:02:28
令人困惑的是,方程显示了同时使用的两个参数。相反,你可以这样看:
atol
**):absolute(a - b) <= atol
绝对耐受性Usecase 1rtol
**):absolute(a - b) <= rtol * absolute(b)
相对耐受性Usecase 2使用单个公差参数实现这两种情况的另一种方法是添加一个标志,该标志确定toerance是相对的还是绝对的。在usecase中分离这种用例,其中数组值可以是大的,也可以是零的。如果只有一个数组可以有零,那么将其设为a
,并使用不对称的方程,而不使用atol
。如果任何一个都可以有零,只需将rtol
设置为大元素的一些可接受的值,并将atol
设置为要为零启动的值。
您通常希望使用rtol
:由于数字和计算的精度是非常有限的,所以较大的数字几乎总是比较小的数字更不精确,并且差分标度是线性的(同样,一般情况下)。您唯一使用atol
的是接近于零的数字,以至于舍入误差很可能大于数字本身。
另一种看法是atol
比较固定的小数位,而rtol
则比较重要的数字。
发布于 2021-01-26 22:03:02
使用哪种容忍度取决于您的问题陈述。例如,如果我的数组的值范围很广,从1e-10到1e10不等,该怎么办?小型atol
对于小值很好,但对于大值则不太好,而对于大型atol
则相反。但是在这种情况下,rtol
是完美的,因为我可以指定可接受的增量应该与每个值一起伸缩。
https://stackoverflow.com/questions/65909842
复制相似问题