为什么numeric.js返回错误的值?

时间:2017-09-11 13:36:17

标签: javascript python numpy math linear

我有输入矩阵:

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

我想计算SVD。我这样做:

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

你是

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

我在Python中执行相同的过程,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]

这是一个错误吗?我该怎么办 ?这不是他们结果不同的唯一一次。我应该相信谁?

1 个答案:

答案 0 :(得分:2)

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

可能有
  • U和V的完整列的相同符号变体和
  • 当相应的奇异值相同时,
  • U和V中的列的相同排列。实际上,可能会发生正交矩阵的任何混合。

这发生在这里。您的输入是秩-1矩阵,即2个奇异值为零,这解释了最后2列的排列。标志翻转也很明显。