字典元素之间的欧几里德距离

时间:2016-02-01 17:09:49

标签: python dictionary combinations euclidean-distance

我正在尝试计算字典元素之间的欧氏距离,如下所示

#!/usr/bin/python

import itertools
from scipy.spatial import distance

def Distance(data):
    for subset in itertools.combinations(data, 2):
        print subset
        #This shows a tuple of two element instead of the elements of the dictionary.
        dst = distance.euclidean(subset)

if __name__ == "__main__":

    data = {}

    data['1'] = [5, 3, 4, 4, 6]
    data['2'] = [1, 2, 3, 4, 5]
    data['3'] = [3, 1, 2, 3, 3]
    data['4'] = [4, 3, 4, 3, 3]
    data['5'] = [3, 3, 1, 5, 4]
    Distance(data)

问题在于,当我尝试计算字典元素的组合时,我会得到一些我不期望的东西,如代码中所评论的那样。我认为我在使用itertools.combinations做错了...

1 个答案:

答案 0 :(得分:3)

您正在进行迭代组合,迭代次数为:

for element in data:
    print(element)

如果您运行该代码,我认为您会看到问题:您正在迭代字典的键,而不是元素。请使用.values()再次尝试:

for subset in itertools.combinations(data.values(), 2):
    print subset

您的代码中还有其他一些问题:首先distance.euclidean需要2个参数,因此您需要执行以下操作:

dst = distance.euclidean(*subset)

......或者......

dst = distance.euclidean(subset[0], subset[1])

...其次,你的功能并没有对dst做任何事情,所以每次循环都会被覆盖。