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