字典元素之间的欧氏距离
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
执行任何操作,因此每次循环时它都会被覆盖。
我正在尝试计算字典元素之间的欧氏距离,如下所示
#!/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
执行任何操作,因此每次循环时它都会被覆盖。