我正在尝试计算字典元素之间的欧氏距离,如下所示
#!/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做错了...
答案 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
做任何事情,所以每次循环都会被覆盖。