Why does this piece of code return True
when it clearly can be seen that the element [1, 1]
is not present in the first array and what am I supposed to change in order to make it return False
?
aux = np.asarray([[0, 1], [1, 2], [1, 3]])
np.asarray([1, 1]) in aux
True
CodePudding user response:
Checking for equality for the two arrays broadcasts the 1d array so the ==
operator checks if the corresponding indices are equal.
>>> np.array([1, 1]) == aux
array([[False, True],
[ True, False],
[ True, False]])
Since none of the inner arrays are all True
, no array in aux
is completely equal to the other array. We can check for this using
np.any(np.all(np.array([1, 1]) == aux, axis=1))
CodePudding user response:
You can think of the in
operator looping through an iterable and comparing each item for equality with what's being matched. I think what happens here can be demonstrated with the comparison to the first vector in the matrix/list:
>>> np.array([1, 1]) == np.array([0,1])
array([False, True])
and bool([False, True])
in Python == True
so the in
operator immediately returns.