我有6个列表存储两组位置的x,y,z坐标(每组3个列表)。我想计算两组中每个点之间的距离。我写了自己的距离函数,但速度很慢。我的一个名单有大约100万条目。 我试过cdist,但它产生了一个距离矩阵,我不明白它是什么意思。是否有其他内置功能可以做到这一点?
答案 0 :(得分:3)
如果可能,请使用numpy
模块来处理此类事情。它比使用常规python列表更有效率。
我正在解释你的问题
N
)k
与集合2中的点k
相关。如果每个点都是某个对象的坐标,我将其解释为包含初始点的集合1并设置为2指出其他时间t。d(k) = dist(p1(k), p2(k))
p1(k)
为点数k
,而p2(k)
为第2组中的点数k
。 / LI>
醇>
假设您的6个列表分别是x1_coords
,y1_coords
,z1_coords
和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)
之间的距离现在作为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)