python上两点间的欧氏距离

tkqqtvp1  于 2021-07-13  发布在  Spark
关注(0)|答案(1)|浏览(452)

我在pyspark中定义了一个函数来计算质心和一堆点之间的欧氏距离。

def dist(x):
  b = {'d1':distance.euclidean((6,8),x),'d2':distance.euclidean((1,2),x),'d3':distance.euclidean((5,5),x)}
  def get_key(val):
    for key, value in b.items():
      if val == value:
        return key
  print(get_key(min(b.values())))

我的观点如下
数据=[(3.023,5.138),(3.075,4.989),(2.321,5.35),(3.328,4.944),(3.195,5.186)]
我的目标是把所有这些点输入到我的函数中,得到每个点的最近距离。我所期望的输出的一个假设示例是这样的

[((3.023, 5.138),d1),
 ((3.075, 4.989),d1),
 ((2.321, 5.35),d2),
 ((3.328, 4.944),d1),
 ((3.195, 5.186),d3)]

当我把单个点输入这个函数时,它工作得很好,然而,当我试图用lambda函数对多个点这样做时,我得到的不是质心,而是零。

data.map(lambda x:(x,dist((x)))).take(5)

(1) Spark Jobs
Out[17]: [((3.023, 5.138), None),
 ((3.075, 4.989), None),
 ((2.321, 5.35), None),
 ((3.328, 4.944), None),
 ((3.195, 5.186), None)]

我做错什么了?谢谢你的帮助。

kuhbmx9i

kuhbmx9i1#

你的职能 dist 什么都不退。它称之为 print 函数,它不返回任何内容。当然,它会打印出来 None .
更改 printreturn 我想你会更快乐。

相关问题