Scipy KDTree получает прямоугольное подмножество сетки, определяемое двумя точками

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

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]])

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


person Peterhack    schedule 22.01.2019    source источник


Ответы (1)


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

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])))]

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

person Peterhack    schedule 22.01.2019