从一点到所有其他点的距离之和

2024-09-27 07:20:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两张单子

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


我可以像这样选择最远的两个点,但不确定如何继续。在

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


Tags: importnumpy距离asnpcolarraypoints
3条回答

您可以使用max函数在“available_points”列表中查找最大值,然后将“available_points”列表的最大值追加到“solution”列表中! 我还附上了输出的截图!在

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

output

因为您标记了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]])

您可以使用^{}-

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

相关问题 更多 >

    热门问题