编程语言
首页 > 编程语言> > python – 使用给定列表计算欧几里德距离

python – 使用给定列表计算欧几里德距离

作者:互联网

def distance(alist, blist):
    sum_of = 0
    for x in alist:
        for y in blist:
            ans = (x - y)**2
            sum_of += ans
    return (sum_of)**(1/2)
print(distance([1, 1, 3], [2, 2, 3])) #1.4142135623730951
print(distance([1, 2, 3], [2, 2, 3])) #1.0
print(distance([2, 2, 3], [2, 2, 3])) #0.0
print(distance([1, 1], [2, 2])) #1.4142135623730951

所以我有一组测试用例,它给了我两个带数字的列表.我的任务是用给定的列表计算欧氏距离.但是,我没有得到正确的结果.我得到了3.7416573867739413,3.0,2.0和2.0.这是我到目前为止所做的,我不确定我做错了什么.

解决方法:

问题出在这里:

   for x in alist:
      for y in blist:

因此,对于alist中的每个点,您将访问blist中的所有点.例如,对于alist = [1,2,3]和blist = [4,5,6],此循环将生成对(1,4),(1,5),(1,6),(2, 4),(2,5),(2,6),(3,4),(3,5),(3,6)但你想要做的只是看(1,4),( 2,5),(3,6).这可以通过zip功能实现.如果你遍历zip(alist,blist),它将迭代这些点.您可以通过执行来确认

list(zip(alist, blist))
Out: [(1, 4), (2, 5), (3, 6)]

因此,如果您使用zip上的单个循环更改嵌套循环,它将计算正确的距离.

def distance(alist, blist):
    sum_of = 0
    for x, y in zip(alist, blist):
        ans = (x - y)**2
        sum_of += ans
    return (sum_of)**(1/2)


distance([1, 1, 3], [2, 2, 3])
Out: 1.4142135623730951

标签:python,euclidean-distance
来源: https://codeday.me/bug/20190623/1266720.html