为什么SVD来自Numeric.JS和Numpy不同意



我有一个输入矩阵:

let t = [
      [0,1,0],
      [0,1,0],
      [0,0,0]
    ]

我想使用numeric.js计算其SVD:

let U = N.svd(t).U; 

U

[-0.7071067811865475, 0.7071067811865475, 0]
[-0.7071067811865475, -0.7071067811865475, 0]
[0, 0, 1]

我使用numpy执行相同的过程:

A=np.array([[0,1,0],[0,1,0],[0,0,0]])
np.linalg.svd(A)[0]

输出:

[0.7071067811865475,   0,   -0.7071067811865475]
[0.7071067811865475,   0,    0.7071067811865475]
[0, 1, 0]

这是一个错误吗?这并不是它们唯一的结果。我应该相信哪个?

在SVD结果中,由于不同的算法而导致一些可能的变化。有可能有

  • U和V和V和
  • 的完整列的相同符号变化当相应的奇异值相同时,
  • u和v中的列的相同排列。确实,可能发生任何形式的混合。

这两者都在这里。您的输入是rank-1矩阵,即2个单数值为零,解释了最后2列的置换。符号翻转也很明显。

相关内容

  • 没有找到相关文章

最新更新