BallTree для минимального расстояния многомерного набора данных с заданной метрикой - PullRequest
0 голосов
/ 09 июля 2019

Я хочу вычислить минимальное расстояние многомерного набора данных до многомерного вектора. У меня есть многовектор вектора:

z = [x,y] with x = [a_1,a_2,a_3] and y = [b_1,b_2,b_3]

и у меня есть база данных вида:

Z = [X,Y] with X = [x_1, x_2, x_3,..] and Y = [y_1, y_2, y_3] 
where x_i, y_i have the same shape as x,y. 

Моя норма определяется как:

d(a,b) = sqrt{(x -a\)^2 + (y - b)^2}.

Моя цель - найти точку минимального расстояния

min(d(x_i, y_i)) in Z to the Point (x,y). 

Полагаю, важно отметить, что (x_i, y_i) имеют одинаковый индекс. Поэтому недостаточно рассчитать расстояние отдельно для x и y.

Я уже рассказал метод BallTree, но я мог сделать это только для x или y. Моя проблема состоит в том, чтобы рассчитать его для обоих подключенных друг к другу.

Matrix_X = np.array([[1, 1],
               [2, 2],
               [5, 5],
               [6, 6]]
              )
Matrix_Y = np.array([[0, 0],
               [2, 2],
matrix_X = np.array([[1, 1, 1],
               [2, 2, 2],
               [5, 5, 5],
               [6, 6, 6]]
              )
matrix_Y = np.array([[0, 0, 0],
               [2, 2, 2],
               [4, 4, 4],
               [7, 7, 7]]
              )
search_vec_x= np.array([3, 3, 3])
search_vec_y= np.array([1, 1, 1])

def dist(a, b):
    search_vec_x = np.array([3, 3])
    search_vec_y = np.array([1, 1])
    return np.sqrt((a - search_vec_x)*(a-search_vec_x) - (b - search_vec_y)*(b-search_vec_y))

matrix_Z = [matrix_X, matrix_Y]

search_vec_z = [search_vec_x, search_vec_y]

kdt = BallTree(matrix_Z, metric=dist)
closestpoint = matrix_Z[kdt.query(np.atleast_2d(search_vec_z), k=1, return_distance=False)]

К сожалению, он говорит мне, что у объекта 'list' нет атрибута 'size'.

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