python - 在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 上的每个列表之间的距离
解决方案
不确定您要为 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
推荐阅读
- python - Python and PDF Forms - error with field name
- git - How to temporarily remove one past changest from master branch and merge back in the future?
- python - 如果未找到文本节点,则跳过提取值
- git - 避免重新解决 git rebase 中的冲突,包括合并提交
- php - Wordpress 中的 PHP 警告
- r - 每个盒子中具有最大尺寸的多项式随机生成
- ubuntu-18.04 - 应该如何配置或安装 salt-cloud 以使用 Saltstack py3 存储库来安装 minion 而不是分发(apt)存储库?
- android - 在屏幕 ARCore 上居中 3D 模型
- excel - Excel VBA 中的幻灯片和形状对象错误
- amazon-web-services - 无法使用 Session Manager 连接 EC2 实例