我有一个输入矩阵:
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列的置换。符号翻转也很明显。