如何计算所有数据点与每个质心的距离?

问题描述 投票:0回答:1

我有数据集,并且我使用了最多5个聚类的聚类算法,所以我必须计算出所有质点与每个质心的距离。我如何在Python中做到这一点。如果质心为

[[ -2.77556e-17,-2.66454e-15],[0.106509,6.99408],[0.0555556,3.72222],[1.38778e-17,1.1],[1.38778e-17,8]]

和数据点是

[[1,7][1,7][1,7][1,7][1,7][1,7][1,3][1,7][1,7][1,7][0,7][0,7][0,7][0,6][0,1][0,1][0,1][0,1][0,1][0,1][0,0][0,0][0,0][0,7][0,0][0,0][0,0][0,4][0,4][0,4][0   4][0,4][0,7][0,8][0,8][0,8][0,8][0,7][0,7][0,7][0,7][0,7][0,7][0,7][0,7][0,7][0,7][0,7][0,3][0,3][0,0][0,0][0,3][0  3][0    0][0    3][0    3][0    3][0    0][0    3][0    3][0    2][0    4][0    4][0    0][0    4][0    4][0    2][0    7][0    7][0    7][0    7][0    0][0    0][0    0][0    5][0    7][0    0][0    0]]
python euclidean-distance
1个回答
0
投票

要计算两点之间的距离,您可以这样做。

import math  
def calculateDistance(x1,y1,x2,y2):  
     dist = math.sqrt((x2 - x1)**2 + (y2 - y1)**2)  
     return dist  

并且您可以使用循环并计算距离并为字典中的每个质心保存距离。

centroids=[[ -2.77556e-17,-2.66454e-15],[0.106509,6.99408],[0.0555556,3.72222],[1.38778e-17, 1.1],[1.38778e-17, 8]]
data_points=[[1 ,7],[1, 7],[1, 7],[1, 7],[1, 7],[1 ,7],[1 ,3],[1, 7],
             [1, 7],[1 ,7],[0, 7],[0, 7],[0, 7],[0, 6],[0, 1],[0, 1],
             [0, 1],[0, 1],[0 ,1]]
import math  
def calculateDistance(x1,y1,x2,y2):  
    dist = math.sqrt((x2 - x1)**2 + (y2 - y1)**2)  
    return dist
dic={}
i=1
for centroid in centroids:
    centroid_name="centroid"+str(i)
    dic[centroid_name]=[]
    for data_point in data_points:
        dic[centroid_name].append(calculateDistance(centroid[0],centroid[1],data_point[0],data_point[1]))
    i=i+1

结果:

{'centroid1': [7.071067811865478,
  7.071067811865478,
  7.071067811865478,
  7.071067811865478,
  7.071067811865478,
  7.071067811865478,
  3.1622776601683817,
  7.071067811865478,
  7.071067811865478,
  7.071067811865478,
  7.000000000000003,
  7.000000000000003,
  7.000000000000003,
  6.000000000000003,
  1.0000000000000027,
  1.0000000000000027,
  1.0000000000000027,
  1.0000000000000027,
  1.0000000000000027],...
© www.soinside.com 2019 - 2024. All rights reserved.