2013-11-25 88 views
0

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

+0

请问您能展示一些样例输入和输出 – thefourtheye

+0

您的距离函数以及您正在解决的确切问题...笛卡尔3D空间中的距离函数非常简单:'sqrt((x2 - x1)** 2 +(y2 - y1)** 2 +(z2 - z1)** 2)',恐怕没有太多优化。 – Altaisoft

+1

'我的一个名单中有大约一百万个条目。“其他名单呢?如果它们的尺寸大约相当于10 * 6 * 10^6 = 10^12对,我甚至担心内置函数会很慢。 – starrify

回答

1

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

我解释你的问题,像这样的

  1. 你有两套分
  2. 两组具有相同数量的中集1点(N
  3. k的指向k有关在集合2中。如果每个点是某个对象的坐标,我将它解释为包含初始点的集合1,并且在某个其他时间t将集合2设置为点。
  4. 你想找到一套2

的距离d(k) = dist(p1(k), p2(k))其中p1(k)是集1和p2(k)点数k是第一点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**2 + 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毫秒。

+0

这不回答原来的问题。如果你无法访问numpy会怎么样? – DuckPuncher