У меня есть много точек на плоскости x,y
длиной около 10000, каждая точка (x,y)
имеет собственный радиус r
. Этот небольшой набор данных — лишь крошечный уголок всего моего набора данных. У меня есть интересующая точка (x1,y1)
, я хочу найти ближайшую точку вокруг (x1,y1)
в пределах 1 и выполнить условие, что расстояние между (x,y)
и (x1,y1)
меньше r
. Я хочу вернуть индекс этих хороших точек, а не сами хорошие точки.
import numpy as np
np.random.seed(2000)
x = 20.*np.random.rand(10000)
y = 20.*np.random.rand(10000)
r = 0.3*np.random.rand(10000)
x1 = 10. ### (x1,y1) is an interest point
y1 = 12.
def index_finder(x,y,r,x1,y1):
idx = (abs(x - x1) < 1.) & (abs(y - y1) < 1.) ### This cut will probably cut 90% of the data
x_temp = x[idx] ### but if I do like this, then I lose the track of the original index
y_temp = y[idx]
dis_square = (x_temp - x1)*(x_temp - x1) + (y_temp - y1)*(y_temp - y1)
idx1 = dis_square < r*r ### after this cut, there are only a few left
x_good = x_temp[idx1]
y_good = y_temp[idx1]
В этой функции я могу найти хорошие точки вокруг (x1,y1)
, но не индекс этих хороших точек. ОДНАКО мне нужен ИСХОДНЫЙ индекс, потому что ИСХОДНЫЙ индекс используется для извлечения других данных, связанных с координатой (x,y)
. Как я уже упоминал, образец набора данных — это лишь крошечная часть всего моего набора данных, я буду вызывать вышеуказанную функцию около 1 000 000 раз для всего моего набора данных, поэтому эффективность вышеупомянутой функции index_finder
также является соображением.
Есть мысли по такой задаче?
[1575 3709 5706] time used for approach 1 is 0.000797033309937 [1575 3709 5706] time used for approach 2 is 0.000538110733032
. Это совершенно неожиданно. 18.09.2017x[idx]
убивает первую. Кроме того, мы могли бы использоватьpower
вместо самоумножения, обновлено. 18.09.2017