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

Abh*_*mar 2 python function list distance

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

Azi*_*bro 10

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

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

import numpy as np

dist = np.linalg.norm(p0 - p1)
Run Code Online (Sandbox Code Playgroud)


Han*_*rén 6

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

我正在这样解释你的问题

  1. 你有两点
  2. 两组的点数相同(N
  3. k在组1是有关点k如果每个点是一些对象的坐标,我在一些其他的时间t将其解释为包含所述初始点集1和组2的点中设置2。
  4. 您想找到距离d(k) = dist(p1(k), p2(k)),其中p1(k)位置k1 p2(k)是集合1 中的点号k,是2中集合中的点号。

假设你的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)
Run Code Online (Sandbox Code Playgroud)

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

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

  • 这不能回答原始问题。如果您无权访问numpy怎么办? (3认同)