Scipy KDTree получает прямоугольное подмножество сетки, определяемое двумя точками - PullRequest
0 голосов
/ 22 января 2019

Я использую следующий пример из:

from scipy import spatial
x, y = np.mgrid[0:5, 2:8]
tree = spatial.KDTree(list(zip(x.ravel(), y.ravel())))
pts = np.array([[0, 0], [2.1, 2.9]])
idx = tree.query(pts)[1]
data = tree.data[??????????]

Если я введу две произвольные точки (см. Переменную pts), я хочу вернуть все пары координат, которые лежат в пределах прямоугольника, определенного двумя точками (KDTree находит ближайшего соседа). Так что в этом случае:

array([[0, 0],
       [0, 1],
       [0, 2],
       [1, 0],
       [1, 1],
       [1, 2],
       [2, 0],
       [2, 1],
       [2, 2]])

Как мне добиться этого с помощью данных дерева?

1 Ответ

0 голосов
/ 22 января 2019

Кажется, что я нашел решение:

from scipy import spatial
import numpy as np
x, y = np.mgrid[0:5, 0:5]
tree = spatial.KDTree(list(zip(x.ravel(), y.ravel())))
pts = np.array([[0, 0], [2.1, 2.2]])
idx = tree.query(pts)[1]
data = tree.data[[idx[0], idx[1]]]
rectangle = tree.data[np.where((tree.data[:,0]>=min(data[:,0])) & (tree.data[:,0]<=max(data[:,0])) & (tree.data[:,1]>=min(data[:,1])) & (tree.data[:,1]<=max(data[:,1])))]

Однако я бы хотел увидеть решение, использующее опцию запроса!

...