【问题标题】:Python: Calculate distance between two data points in DictionaryPython:计算字典中两个数据点之间的距离
【发布时间】:2015-10-03 13:09:25
【问题描述】:

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

{'加拿大': ['10.625', '80.743'], '圣多美和普林西比': ['32.399', '63.935']}

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

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

我怎样才能用字典做到这一点?我无法弄清楚或找到有关如何使用 {'Canada': ['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})

【问题讨论】:

    标签: python-2.7 dictionary euclidean-distance


    【解决方案1】:

    我想你想计算所有deo点之间的距离是你的字典吧? 比您必须通过将它们配对来创建字典元素的笛卡尔积。 itertools.product 为您完成。像这样的东西: 从迭代工具导入 *

    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')]
    

    您必须像这样遍历这些对并计算它们的欧几里得距离:

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

    如果您将距离值与magic_number = 111111 相乘,您将获得以公里为单位的相对较好的近距离坐标估计时间。

    但我认为您必须使用harvesine distance,这是一个更昂贵的公式,但可以为您提供准确的距离(特别是如果您测量国家之间的距离)。

    【讨论】:

      【解决方案2】:

      要计算两个数据点之间的欧几里得距离,您可以使用以下脚本使用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)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-11-21
        • 2010-10-30
        • 1970-01-01
        • 1970-01-01
        • 2011-04-23
        相关资源
        最近更新 更多