I have two sets of coordinates and want to find out which coordinates of the
coo set are identical to any coordinate in the
targets set. I want to know the indices in the
coo set which means I'd like to get a list of indices or of bools.
import numpy as np coo = np.array([[1,2],[1,6],[5,3],[3,6]]) # coordinates targets = np.array([[5,3],[1,6]]) # coordinates of targets print(np.isin(coo,targets)) [[ True False] [ True True] [ True True] [ True True]]
The desired result would be one of the following two:
[False True True False] # bool list [1,2] # list of concerning indices
My problem is, that ...
axis-attribute so that I could use
- even applying logical and to each row of the output would return
Truefor the last element, which is wrong.
I am aware of loops and conditions but I am sure Python is equipped with ways for a more elegant solution.
Here's one way taking advantage of
(coo[:,None] == targets).all(2).any(1) # array([False, True, True, False])
Check for every row in
coo whether or not it matches another in
target by direct comparisson having added a first axis to
coo so it becomes broadcastable against
(coo[:,None] == targets) array([[[False, False], [ True, False]], [[False, False], [ True, True]], [[ True, True], [False, False]], [[False, False], [False, True]]])
Then check which
ndarrays along the second axis have
all values to
(coo[:,None] == targets).all(2) array([[False, False], [False, True], [ True, False], [False, False]])
And finally use
any to check which rows have at least one