Получить индексы совпадающих точек в другом массиве - PullRequest
0 голосов
/ 04 ноября 2011

Всего не указано, как это сделать.

У меня есть массив "points" и массив "a", содержащий некоторые из этих точек:

points = numpy.array([[1,2],[4,0],[3,0],[2,4]])
a = numpy.array([[1,2], [3,0]])

Как я могу получитьиндексы в «точках» точек в ([0,2]), предпочтительно без петель?

Ответы [ 2 ]

0 голосов
/ 04 ноября 2011

Для многих точек поместите a в scipy.spatial.cKDTree , затем выполните запрос, чтобы найти ближайший a к каждому point. Это берет O (N ln N) для случайно распределенных точек, см. Kd tree ; циклы в Cython, так быстро.

0 голосов
/ 04 ноября 2011

Это операция O (n²), и она не предназначена для прямого метода без цикла.

Следующее решение работает для любого размера двумерных переменных points и a.

import numpy as np
points = np.array([[1,2],[4,0],[3,0],[2,4]])
a = np.array([[1,2], [3,0]])


np.array([np.argwhere((points==a[i]).all(axis=1))[0][0] for i in xrange(a.shape[0])])
# returns array([0, 2])

Однако это не работает для значений a, отсутствующих в points.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...