Python - Найти соответствие в массиве - PullRequest
0 голосов
/ 05 февраля 2020

У меня большой 2D-массив (3x100 000) 3D-координат и второй 1D-массив с определенными несортированными координатами. Я хотел бы найти все точки с координатами, содержащимися во втором массиве

Пример:

mat1 = np.array([[1,2,3],[1,2,5],[2,3,6],[10,11,12],[20,2,3]])

mat2 = np.array([1,2,3,6])

Так что здесь мне нужно получить индексы 0 и 2. И мне нужно найти каждая переписка примерно на 100 000 координат. Есть ли конкретная c функция в Python для выполнения этой работы?

Подводя итог моей ситуации:

enter image description here

1 Ответ

3 голосов
/ 05 февраля 2020

Самый простой способ будет с np.isin -

# a,b are input arrays - mat1,mat2 respectively
In [7]: np.flatnonzero(np.isin(a,b).all(1))
Out[7]: array([0, 2])

Другой с np.searchsorted -

In [19]: idx = np.searchsorted(b,a)

In [20]: idx[idx==len(b)] = 0

In [21]: np.flatnonzero((b[idx]==a).all(1))
Out[21]: array([0, 2])

Если b не в отсортированном порядке, используйте np.argsort(b) как sorter arg с np.searchsorted. More info.

...