Я работаю с довольно большим набором данных 2D точек (от 500 000 до 1 м), размером около 100x100. для наших целей давайте используем меньший набор данных из 1000 точек.
x = np.random.random_sample((1000,)) * 100
y = np.random.random_sample((1000,)) * 100
и, по сути, хотел бы получить индекс точек внутри окружности, расположенной в точке x0, y0 с радиусом r. Это легко достижимо с
idx = np.signbit((x - x0)*(x - x0) + (y - y0)*(y - y0) - r*r)
Затем я хотел бы сделать что-то с 2D-точками в этом круге, немного переместить x0, y0 и выполнить тот же процесс с данными в новом круге, т.е.
x0 = np.linspace(0,100,100)
y0 = np.linspace(0,100,100)
r = 2
for i in range(0,100):
for j in range(0,100):
idx = np.signbit((x - x0[i])*(x - x0[i]) + (y - y0[j])*(y - y0[j]) - r*r)
#Do Something Here with x[idx] and y[idx]
Однако поиск idx, похоже, занимает некоторое время, особенно для больших наборов данных. Есть ли способ искать точки, расположенные в окружности радиуса 2, с x0, y0 = 0,0, а затем на следующем цикле (где x0 = 0, y0 = 1) искать только атомы, близкие к индексированным как true в первом цикле (поскольку центр круга не сдвинулся далеко от тех точек, которые были отмечены как true в первом цикле).
Или я что-то упустил полностью, и есть ли более эффективный способ сортировки 2D-данных в (возможно, перекрывающиеся) области (это не обязательно должен быть круг, но я выбрал его для простоты уравнения).
Спасибо !!!