gpt4 book ai didi

python - 使用 atol 和 pandas assert_frame_equal 意外通过测试

转载 作者:行者123 更新时间:2023-12-04 07:36:25 25 4
gpt4 key购买 nike

我正在尝试使用 pandas 的测试库比较两个数据帧。我不希望测试通过的值完全相同,所以我使用 atol 参数。Atol 指定允许的绝对公差。但是,当要比较的值变高时,即使超过容差阈值,测试也会通过。

我在下文中提供两个可重现的示例:

import pandas as pd
import pandas.testing

df1 = pd.DataFrame([42])
df2 = pd.DataFrame([41])
#This test fails as expected
pd.testing.assert_frame_equal(df1, df2, check_exact=False, atol=0.1)

df1 = pd.DataFrame([2006642])
df2 = pd.DataFrame([2006641])
pd.testing.assert_frame_equal(df1, df2, check_exact=False, atol=0.1)
#this test passes, but it should not

谁能解释为什么会这样?我是否误解了 atol 的工作原理?

最佳答案

事实证明,atol 参数不是单独使用的,而是与 rtol 一起使用的,默认值为 (1e-05),这就是为什么我比较的较大的值使测试通过。

absolute(a - b) <= (atol + rtol * absolute(b))

为了得到预期的结果,还需要设置rtol。在我的例子中,为了专门使用 atol,我需要将 rtol 设置为 0。

df1 = pd.DataFrame([2006642])
df2 = pd.DataFrame([2006641])
#this test now fails as expected
pd.testing.assert_frame_equal(df1, df2, check_exact=False, atol=0.1, rtol=0)

归功于此answer .

关于python - 使用 atol 和 pandas assert_frame_equal 意外通过测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67719449/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com