Javascript 为什么numeric.js和numpy的SVD结果不一致?
我有一个输入矩阵:Javascript 为什么numeric.js和numpy的SVD结果不一致?,javascript,python,numpy,linear-algebra,Javascript,Python,Numpy,Linear Algebra,我有一个输入矩阵: 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([[
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全列的相同符号变化,以及
- 当相应的奇异值相同时,U和V中列的相同排列。事实上,任何形式的正交矩阵混合都可能发生
这两件事都发生在这里。您的输入是秩1矩阵,即2个奇异值为零,这解释了最后2列的排列。符号翻转也很明显。你知道SVD分解在做什么吗?我想在numerics js输出中找到右零空间的基向量,它们不在ASee的零空间中。感谢你提供有用的参考。为了澄清问题,V,U中的n-r向量不保证在A的零/左零空间中?在通常的算法中,奇异值按降序排列,因此最后的
n-r
列实际上跨越了矩阵的左空和右空。但是,这些列中出现这些空空间的哪个正交基可能因实现而异。