Python:计算Dictionary中两个数据点之间的距离

时间:2015-10-03 13:09:26

标签: python-2.7 dictionary euclidean-distance

我在字典列表中有很多数据点,保存为:

{'加拿大':['10 .625','80 .743'],'圣多美和普林西比':['32 .399','63。935']}

我需要使用公式计算每个数据点中的两个数字来计算它们之间的欧几里德距离:

sqrt{[x_j-x_i]**2 + [y_j-y_i]**2}

我怎么能用词典呢?我无法弄清楚或找到关于如何使用{'加拿大'的[]部分的任何答案:['10 .625','80 .743']}

我需要编写一个函数来计算字典中两个数据点坐标之间的距离,但我不知道从哪里开始。

def distance():
   # compute distance where two data point in a dictionary is used
   # data points e.g.: {'Canada': ['10.625', '80.743'], 'Sao Tome and Principe': ['32.399', '63.935']}
   distance = result(sqrt{[10.625,32.399]**2 + [80.743,63.935]**2})

2 个答案:

答案 0 :(得分:0)

我想你想计算所有deo点之间的距离是你的字典吗? 通过将它们成对配对,您必须创建字典元素的笛卡尔积。 itertools.product为您完成。像这样的东西: 来自itertools import *

loc = {"c1": ["lat1","lon2"], "c2": ["lat2","lon2"], "c3": ["lat3","lon3"], }
print list(product(loc, repeat=2))

输出:

[('c3', 'c3'), ('c3', 'c2'), ('c3', 'c1'), ('c2', 'c3'), ('c2', 'c2'), ('c2', 'c1'), ('c1', 'c3'), ('c1', 'c2'), ('c1', 'c1')]

比你必须迭代对并计算他们的eucledian距离,如下:

def distance(loc1, loc2):
    return ((loc1[0] - loc2[0])**(2) + (loc1[1] - loc2[1])**(2))**(.5)

如果将距离值与magic_number = 111111相乘,您将获得相对良好的estime(以公里为单位)以获得近距离坐标。

但我很瘦,你必须使用harvesine distance这个更昂贵的公式,但会给你准确的距离(特别是如果你衡量国家之间的距离)。

答案 1 :(得分:0)

要计算两个数据点之间的欧几里得距离,可以使用以下脚本,并使用numpy

import NumPy as np
def euclidean_dis(row):
    return np.sqrt(np.sum((row['v'] - row['u']) ** 2))

并假设您要计算列v和列u之间的欧几里得距离,然后将其应用于数据框。

df["euclidean_distance"]=df.apply(euclidean_dis,axis=1)