1

我正在使用 Ipython 笔记本。我正在做一个项目,我需要查看 3D 空间中的大约 100 个数据点,并计算出每个数据点之间的距离以及彼此之间的角度。我想查看数据点的相关性,并最终查看数据是否有任何结构(隐藏在某处的直线)。我研究了聚类技术和霍夫变换,但它们似乎没有给我我需要的结果。任何想法都非常感谢..谢谢!

4

2 回答 2

1

对于确定三维点之间的成对距离的第一个问题,您可以使用scipy.spatial.distance.pdist(). 这将为 n 个点生成 n(n-1)/2 距离。对于寻找点之间角度的第二个问题,这更棘手。这似乎很棘手,我什至不想考虑它;但是,为此,您可以使用scipy.spatial.distance.cosine(),这将确定两个向量之间的余弦距离。

你看过scikits吗?我发现它们对我的工作很有帮助。http://scikit-learn.org/stable/

于 2012-06-21T21:11:07.270 回答
0

最好使用scipy.spatial.distance.pdist()cjohnson318 的回答中提到的方法找到距离。对于一个小数组点'a'定义为:

import numpy as np
a=np.array([[0,0,0],[1,1,1],[4,2,-2],[3,-1,2]])

点之间的距离欧几里得距离'D'可以找到:

from scipy.spatial.distance import pdist, squareform
D = squareform(pdist(a))

在 3d 极坐标表示法中,您需要 2 个角度来定义从一个点到另一个点的方向。给出方向的笛卡尔单位向量似乎也可以满足您的目的。这些可以找到:

(a-a[:,np.newaxis,:]) / D[...,np.newaxis]

这将包括对角元素中的 NaN,因为从点到自身没有向量。如有必要,可以使用将这些更改为零np.nan_to_num

如果您确实需要角度,则可以通过应用于np.arctan单位向量的分量来获得它们。

于 2013-02-04T01:31:28.720 回答