Skip to content
Advertisement

comparing numpy arrays with np.allclose()

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?

Advertisement

Answer

“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.

User contributions licensed under: CC BY-SA
1 People found this is helpful
Advertisement