【问题标题】:How do you tell when the points on a 3D plot lie on a plane or on a curve?如何判断 3D 图上的点何时位于平面上或曲线上?
【发布时间】:2020-10-25 14:09:13
【问题描述】:
我有一个使用 matploblib Axes 3D 生成的一些数据的 3D 散点图。我需要决定它是在平面上还是在曲线上。我试图了解表明平面或曲线的视觉差异。我的猜测是,如果沿大范围的 z 值存在点,那么它就位于曲线上,因为如果它位于平面上,则这意味着这些点仅分布在平面上。即使我的猜测是正确的,我也只是排除了唯一的另一种可能性,那么我如何具体判断数据是否位于曲线上?
【问题讨论】:
标签:
python
r
geometry
data-science
【解决方案1】:
如果平面倾斜,您还会发现范围很广的 z 值。
假设您的 3D points 在 nx3 数组中,您可以使用以下方法计算适合它们的平面:
centroid = np.mean(points, axis=0)
_, eigenvalues, eigenvectors = np.linalg.svd(points - centroid, full_matrices=False)
normal = eigenvectors[2]
dispersion = eigenvalues[2]
最接近散点的平面由一个点 (centroid) 及其normal 向量定义。
然后,根据法线轴上的dispersion 值,您可以决定它是足够低(点位于平面上)还是太高(它们不在平面上)。