我是 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_equal2
是 True
?如果值相同,为什么 is_equal1
是 False
?
答案 0 :(得分:1)
"为什么当我打印数组时它们的值是相等的,但随后我打印 他们最后的项目有什么不同?”
这是因为 numpy.ndarray
有一个 preset display precision 正在印刷中。
“如果值实际上不同,为什么 is_equal2 是 True?”
根据 numpy.allclose 的文档,它是按元素比较:
absolute(a - b) <= (atol + rtol * absolute(b))
atol 默认为 1e-8,因此您需要在此处提供 atol
参数而不是 rtol
。