Because you tag numpy. You need to check each row of B
with each row in A
then use numpy.all
and numpy.any
. (but you need to consider in python, Index start from zero, if you want [3,8]. you need to +1
result.)
>>> np.argwhere((A==B[:,None]).all(-1).any(0)).ravel()
array([2, 7])
Explanation:
>>> A = np.asarray(A)
>>> B = np.asarray(B)
>>> A == B[:,None]
array([[[ True, False],
[ True, False],
[ True, True],
[False, False],
[False, False],
[False, True],
[False, False],
[False, False],
[False, True]],
[[False, False],
[False, True],
[False, False],
[False, False],
[False, True],
[False, False],
[ True, False],
[ True, True],
[ True, False]]])
>>> (A==B[:,None]).all(axis=-1)
array([[False, False, True, False, False, False, False, False, False],
[False, False, False, False, False, False, False, True, False]])
>>> (A==B[:,None]).all(axis=-1).any(axis=0) <- you want index of this array that have `True` value
array([False, False, True, False, False, False, False, True, False])
>>> np.argwhere((A==B[:,None]).all(axis=-1).any(axis=0))
array([[2],
[7]])
>>> np.argwhere((A==B[:,None]).all(axis=-1).any(axis=0)).ravel()
array([2, 7])