使用 python 中的内置函数查找 3d 距离

新手上路,请多包涵

我有 6 个列表存储两组位置的 x、y、z 坐标(每个 3 个列表)。我想计算两组中每个点之间的距离。我已经编写了自己的距离函数,但速度很慢。我的一个列表有大约 100 万个条目。我试过 cdist,但它产生了一个距离矩阵,我不明白它是什么意思。是否有另一个内置函数可以做到这一点?

原文由 Abhinav Kumar 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 415
1 个回答

如果可能,请使用 numpy 模块来处理此类事情。它比使用常规 python 列表更有效。

我这样解释你的问题

  1. 你有两组点
  2. 两组的点数相同( N
  3. 集合 1 中的点 k k 与集合 2 中的点 — 有关。如果每个点都是某个对象的坐标,我将其解释为包含初始点和集合 2 的集合 1其他时间 t 的点。
  4. You want to find the distance d(k) = dist(p1(k), p2(k)) where p1(k) is point number k in set 1 and p2(k) is point number k 在第 2 组中。

Assuming that your 6 lists are x1_coords , y1_coords , z1_coords and x2_coords , y2_coords , z2_coords 分别,然后你可以这样计算距离

import numpy as np
p1 = np.array([x1_coords, y1_coords, z1_coords])
p2 = np.array([x2_coords, y2_coords, z2_coords])

squared_dist = np.sum((p1-p2)**2, axis=0)
dist = np.sqrt(squared_dist)

p1(k)p2(k) 之间的距离现在存储在 numpy 数组中作为 dist[k]

至于速度:在配备“Intel® Core™ i7-3517U CPU @ 1.90GHz”的笔记本电脑上,计算 N=1E6 的两组点之间的距离的时间为 45 毫秒。

原文由 Hannes Ovrén 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题