Сумма расстояний от точки до всех остальных точек

У меня есть два списка

available_points = [[2,3], [4,5], [1,2], [6,8], [5,9], [51,35]]

а также

solution = [[3,5], [2,1]]

Я пытаюсь высказать точку в available_points и добавить его к solution для которого сумма евклидовых расстояний от этой точки до всех точек в solution это величайший

Итак, я бы получил это

solution = [[3,5], [2,1], [51,35]]


Я был в состоянии выбрать начальные 2 самые отдаленные точки, как это, но не знал, как поступить.

import numpy as np
from scipy.spatial.distance import pdist, squareform

available_points = np.array([[2,3], [4,5], [1,2], [6,8], [5,9], [51,35]])

D = squareform(pdist(available_points)
I_row, I_col = np.unravel_index(np.argmax(D), D.shape)
solution = available_points[[I_row, I_col]]

что дает мне

solution = array([[1, 2], [51, 35]])

4 ответа

Решение

Ты можешь использовать cdist -

In [1]: from scipy.spatial.distance import cdist

In [2]: max_pt=available_points[cdist(available_points, solution).sum(1).argmax()]

In [3]: np.vstack((solution, max_pt))
Out[3]: 
array([[ 3,  5],
       [ 2,  1],
       [51, 35]])

Так как вы помечаете numpy

import numpy as np 

solution=np.array(solution)
available_points=np.array(available_points)
l=[]
for x in solution:
    l.append(np.linalg.norm(available_points-x, keepdims=True,axis=1))


np.append(solution,[available_points[np.argmax(np.array(l).sum(0))]],axis=0)
Out[237]: 
array([[ 3,  5],
       [ 2,  1],
       [51, 35]])

Вы можете использовать функцию max, чтобы найти максимум в списке "available_points", а затем добавить максимум списка "available_points" в список "решения"! Мне тоже прикреплен скриншот с выводом!

available_points = [[2,3], [4,5], [1,2], [6,8], [5,9], [51,35]];
solution = [[3,5], [2,1]]
solution.append(max(available_points));
print(solution);

выход

Я понял это с помощью cdist

from scipy.spatial.distance import cdist

d = cdist(solution, available_points)

distances = []

for q in range(len(available_points)):
    y = d[:,q]
    distances.append(sum(y))

# Largest Distance
max_point = available_points[distances.index(max(distances))]

# Update datasets
solution = np.append(solution, [max_point], axis=0)
universe = np.delete(available_points, max_index, 0)
Другие вопросы по тегам