从一个点到所有其他点的距离总和
Sum of distances from a point to all other points
我有两个列表
available_points = [[2,3], [4,5], [1,2], [6,8], [5,9], [51,35]]
和
solution = [[3,5], [2,1]]
我正在尝试 pop available_points
中的一个点并将其 append 到 solution
从该点到 solution
中所有点的欧氏距离之和最大。
所以,我会得到这个
solution = [[3,5], [2,1], [51,35]]
我能够像这样 select 最初的 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]])
您可以使用 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);
自从你标记 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]])
您可以使用 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]])
我用 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)
我有两个列表
available_points = [[2,3], [4,5], [1,2], [6,8], [5,9], [51,35]]
和
solution = [[3,5], [2,1]]
我正在尝试 pop available_points
中的一个点并将其 append 到 solution
从该点到 solution
中所有点的欧氏距离之和最大。
所以,我会得到这个
solution = [[3,5], [2,1], [51,35]]
我能够像这样 select 最初的 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]])
您可以使用 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);
自从你标记 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]])
您可以使用 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]])
我用 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)