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

2024-04-27 00:36:50 发布

您现在位置:Python中文网/ 问答频道 /正文

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


Tags: 函数距离列表条目矩阵内置速度单子
1条回答
网友
1楼 · 发布于 2024-04-27 00:36:50

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

我这样解释你的问题

  1. 你有两套观点
  2. 两个集合的点数相同(N
  3. 集合1中的点k与集合2中的点k相关。如果每个点都是某个对象的坐标,我将其解释为包含初始点的集合1,并在另一个时间t将该点设置为集合2
  4. 要找到距离d(k) = dist(p1(k), p2(k)),其中p1(k)是集合1中的点编号k,而p2(k)是集合2中的点编号k

假设您的6个列表分别是x1_coordsy1_coordsz1_coordsx2_coordsy2_coordsz2_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)之间的距离现在作为dist[k]存储在numpy数组中。

至于速度:在我的笔记本电脑上,使用“英特尔(R)酷睿(TM)i7-3517U CPU@1.90GHz”,计算N=1E6的两组点之间距离的时间是45ms

相关问题 更多 >