Reputation: 3
I am new to Python. I cannot understand the behavior of the following code (I am trying to create a unit test for something):
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)
This code prints:
[0.5 0.88079708]
[0.5 0.88079708]
0.8807970779778823
0.88079708
False
True
Why when I print arrays their values are equal, but then I print their last items they are different? If the values are actually different, why is_equal2
is True
? If the values are the same, why is_equal1
is False
?
Upvotes: 0
Views: 417
Reputation: 4318
"Why when I print arrays their values are equal, but then I print their last items they are different?"
It is because numpy.ndarray
has a preset display precision in print.
"If the values are actually different, why is_equal2 is True?"
According to the docs of numpy.allclose, it is comparing element-wise:
absolute(a - b) <= (atol + rtol * absolute(b))
atol is default to be 1e-8, so you need to provide atol
parameter here instead of rtol
.
Upvotes: 1