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

时间:2013-11-25 04:53:08

标签: python list function distance

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

2 个答案:

答案 0 :(得分:3)

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

我正在解释你的问题

  1. 你有两套积分
  2. 两组具有相同的分数(N
  3. 集合1中的点k与集合2中的点k相关。如果每个点都是某个对象的坐标,我将其解释为包含初始点的集合1并设置为2指出其他时间t。
  4. 您希望在第1组中找到距离d(k) = dist(p1(k), p2(k)) p1(k)为点数k,而p2(k)为第2组中的点数k。 / LI>

    假设您的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数组中。

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

答案 1 :(得分:0)

尽管此解决方案使用 numpy,但 np.linalg.norm 可能是另一种解决方案。

假设你有一个点 p0 = np.array([1,2,3]) 和第二个点 p1 = np.array([4,5,6])。那么找到两者之间距离的最快方法是:

dist = np.linalg.norm(p0 - p1)