将 numpy 数组与 np.allclose() 进行比较

时间:2021-04-30 17:42:53

标签: python python-3.x numpy

我是 Python 新手。我无法理解以下代码的行为(我正在尝试为某事创建单元测试):

    import numpy as np

    input = np.array([0, 2])
    result = 1 / (1 + np.exp(-input))
    expected_result = np.array([0.5, 0.88079708])

    print(result)
    print(expected_result)

    print(result[1])
    print(expected_result[1])

    is_equal1 = np.array_equal(result, expected_result)
    is_equal2 = np.allclose(result, expected_result, rtol=0.00000000000000000000001)

    print(is_equal1)
    print(is_equal2)

此代码打印:

[0.5        0.88079708]
[0.5        0.88079708]
0.8807970779778823
0.88079708
False
True

为什么当我打印数组时,它们的值是相等的,但我打印它们的最后一项时它们却不同?如果值实际上不同,为什么 is_equal2True?如果值相同,为什么 is_equal1False

1 个答案:

答案 0 :(得分:1)

<块引用>

"为什么当我打印数组时它们的值是相等的,但随后我打印 他们最后的项目有什么不同?”

这是因为 numpy.ndarray 有一个 preset display precision 正在印刷中。

<块引用>

“如果值实际上不同,为什么 is_equal2 是 True?”

根据 numpy.allclose 的文档,它是按元素比较:

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

atol 默认为 1e-8,因此您需要在此处提供 atol 参数而不是 rtol

相关问题