字典元素之间的欧氏距离

Euclidean distance among dictionary elements

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

#!/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...

您正在采用迭代的组合,迭代是:

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 执行任何操作,因此每次循环时它都会被覆盖。