为什么numpy SVD在给定一组正好在平面上的点时返回一个非法向量?

ki1q1bka  于 2023-05-17  发布在  其他
关注(0)|答案(1)|浏览(147)

我尝试使用numpy的SVD方法np.linalg.svd()拟合平面。作为测试,我将在R3中使用两组点。在这两种情况下,所有点在第三维中的值都为100。由于我创建的点集完全在Z=100平面内,因此我期望:
1.第三个奇异值将为0(在机器精度内)。

  1. vh的第三列将是[0, 0, 1](在机器精度范围内)。

Set 1

对于该集合中的一些点,第一值和第二值具有比第三值大得多的幅度。

pts = [[2345,-124, 100], [981, -123, 100], [4987,12345, 100], [-1324, 0, 100]]
svd = np.linalg.svd(pts)

这里的结果与预期大致相同:
svd[1]产生array([13349.56221861, 2705.21722461, 158.26983058])。我希望第三个奇异值更接近于0,因为我的点完全适合平面,但它至少足够清楚地表明svd[2]的第三列将是我的平面法向量。
svd[2]生成以下内容:

array([[-0.38833201, -0.92148669, -0.00778029],
       [-0.92117922,  0.38840419, -0.02389612],
       [ 0.02504185, -0.00211259, -0.99968417]])

再说一次,很接近了。我希望第三列的前两个维度更接近于零(更像是在机器精度范围内),但这对我的拟合应用程序是可行的。

Set 2

对于该集合中的所有点,第一值和第二值具有小于第三值的量值。

pts = [[57, 37, 100], [34, 37, 100], [11, -37, 100], [-11, 38, 100]]
svd = np.linalg.svd(pts)

这就是事情开始看起来很奇怪的地方。
svd[1]生成array([209.35774076, 64.78329726, 46.58820429])。这是令人惊讶的。第三奇异值应更接近于0。
svd[2]生成以下内容:

array([[-0.23396901, -0.2018738 , -0.95105493],
       [ 0.31100035,  0.91126958, -0.26993803],
       [-0.92116084,  0.35893555,  0.15042602]])

这是非常出乎意料的。vh的第三列距离[0, 0, 1]相当远。当然好于机器精度。它实际上更接近于[1, 0, 0]
这是怎么回事?SVD在numpy中的实现方式是否没有给予更高精度的结果?**我只是没有正确使用它或误解了结果?

8oomwypt

8oomwypt1#

编辑:查看您编辑的文章。
我认为你想从SVD中得到的是把你的点移到它们的均值后的结果。你应该得到你想要的结果后这样做。

pts = np.array([[57, 37, 100], [34, 37, 100], [11, -37, 100], [-11, 38, 100]])
pts = pts - pts.mean(axis=0)
svd = np.linalg.svd(pts)

(array([[-0.45221016,  0.51373144,  0.15971725,  0.71139045],
        [-0.31606121,  0.06525962,  0.8397871 , -0.43658232],
        [ 0.83162358,  0.2416381 ,  0.42832508,  0.25797456],
        [-0.06335221, -0.82062916,  0.29289188,  0.48658876]]),
 array([67.13174076, 47.06197384,  0.        ]),
 array([[-0.39738768, -0.91765082, -0.        ],
        [ 0.91765082, -0.39738768, -0.        ],
        [ 0.        ,  0.        ,  1.        ]]))

之所以不同,是因为SVD会找到最佳的线性(非仿射)变换来拟合点,所以它不能处理移位的平面。在你的例子中,当你把z的距离设置得更远时,你就激励了必须穿过原点的平面直立起来,并穿过这些点,而不是平躺着。
因此,当z坐标的值比x和y坐标高得多时,你会得到看起来出乎意料的平面。

相关问题