【问题标题】:Using Python to find distance and angle of surrounding data points in 3D. Finding straight lines使用 Python 在 3D 中查找周围数据点的距离和角度。寻找直线
【发布时间】:2012-06-21 04:35:24
【问题描述】:

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

【问题讨论】:

  • 只需对数据点进行线性回归。 scipy 是一个很好的包。

标签: python scipy ipython


【解决方案1】:

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

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

【讨论】:

【解决方案2】:

如 cjohnson318 的回答中所述,最好使用 scipy.spatial.distance.pdist() 找到距离。对于点'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 应用于单位向量的分量来获得它们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-27
    • 1970-01-01
    • 2013-12-09
    • 2011-07-10
    • 2022-08-14
    • 1970-01-01
    • 2016-03-18
    • 1970-01-01
    相关资源
    最近更新 更多