You need the np.where
function to get the indexes:
>>> np.where((vals == (0, 1)).all(axis=1))
(array([ 3, 15]),)
Or, as the documentation states:
If only condition is given, return
condition.nonzero()
You could directly call .nonzero()
on the array returned by .all
:
>>> (vals == (0, 1)).all(axis=1).nonzero()
(array([ 3, 15]),)
To dissassemble that:
>>> vals == (0, 1)
array([[ True, False],
[False, False],
...
[ True, False],
[False, False],
[False, False]], dtype=bool)
and calling the .all
method on that array (with axis=1
) gives you True
where both are True:
>>> (vals == (0, 1)).all(axis=1)
array([False, False, False, True, False, False, False, False, False,
False, False, False, False, False, False, True, False, False,
False, False, False, False, False, False], dtype=bool)
and to get which indexes are True
:
>>> np.where((vals == (0, 1)).all(axis=1))
(array([ 3, 15]),)
or
>>> (vals == (0, 1)).all(axis=1).nonzero()
(array([ 3, 15]),)
I find my solution a bit more readable, but as unutbu points out, the following may be faster, and returns the same value as (vals == (0, 1)).all(axis=1)
:
>>> (vals[:, 0] == 0) & (vals[:, 1] == 1)