首页 > 解决方案 > 将 numpy 数组与 np.allclose() 进行比较

问题描述

我是 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

标签: pythonpython-3.xnumpy

解决方案


“为什么当我打印数组时它们的值是相等的,但是我打印它们的最后一项它们是不同的?”

这是因为在打印中numpy.ndarray具有预设的显示精度。

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

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

绝对(a - b)<=(atol + rtol * 绝对(b))

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


推荐阅读