首页 > 解决方案 > 在python中用多个列表计算欧几里得距离

问题描述

我正在编写一个简单的程序来使用 python 计算多个列表之间的欧几里得距离。这是我很胖的代码

import math
euclidean = 0
euclidean_list = []
euclidean_list_complete = []

test1 = [[0.0, 0.0, 0.0, 152.0, 12.29], [0.0, 0.0, 0.357, 245.0, 10.4], [0.0, 0.0, 0.10, 200.0, 11.0]]

test2 = [[0.0, 0.0, 0.0, 72.0, 12.9], [0.0, 0.0, 0.0, 80.0, 11.3]]

for i in range(len(test2)):
    for j in range(len(test1)):
        for k in range(len(test1[0])):
            euclidean += pow((test2[i][k]-test1[j][k]),2)

        euclidean_list.append(math.sqrt(euclidean))
        euclidean = 0

    euclidean_list_complete.append(euclidean_list)


print euclidean_list_complete

我对这段代码的问题是它没有正确打印我想要的输出。输出应该是 [[80.0023, 173.018, 128.014], [72.006, 165.002, 120.000]]

但相反,它打印

[[80.00232559119766, 173.01843095173416, 128.01413984400315, 72.00680592832875, 165.0028407300917, 120.00041666594329], [80.00232559119766, 173.01843095173416, 128.01413984400315, 72.00680592832875, 165.0028407300917, 120.00041666594329]]

我猜它与循环有关。我应该怎么做才能修复它?顺便说一句,我不想​​将 numpy 或 scipy 用于学习目的

如果不清楚,我想计算 test2 上的列表与 test1 上的每个列表之间的距离

标签: pythonlisteuclidean-distance

解决方案


不确定您要为 3 个向量实现什么,但对于两个向量,代码必须简单得多:

test2 = [[0.0, 0.0, 0.0, 72.0, 12.9], [0.0, 0.0, 0.0, 80.0, 11.3]]

def distance(list1, list2):
    """Distance between two vectors."""
    squares = [(p-q) ** 2 for p, q in zip(list1, list2)]
    return sum(squares) ** .5

d2 = distance(test2[0], test2[1])  

Withnumpy是一个更短的语句

PS。推荐python 3


推荐阅读