减少矩阵

时间:2016-06-05 03:47:41

标签: python numpy matrix precision svd

我必须对矩阵进行SVD​​,但它有一些错误,在以下示例中U[1][1]U[2][1]U[2][0]应为0

enter image description here

问题是上面的例子只是一个测试,我必须使用大型矩阵,这些矩阵不会很好,我能做些什么才能相信我得到的结果?

1 个答案:

答案 0 :(得分:2)

大多数标准1e-17被视为0

例如,它通过了np.allclose测试

In [582]: A=np.array([1,-1,1,1,1,1]).reshape(3,2)

In [583]: U,d,V=np.linalg.svd(A)

In [584]: U
Out[584]: 
array([[ -8.56248666e-17,   1.00000000e+00,  -6.40884929e-17],
       [ -7.07106781e-01,   2.53974359e-17,  -7.07106781e-01],
       [ -7.07106781e-01,   2.53974359e-17,   7.07106781e-01]])

In [585]: y=np.array([[0,np.sqrt(2),0],[-1,0,-1],[-1,0,1]])/np.sqrt(2)

In [586]: y
Out[586]: 
array([[ 0.        ,  1.        ,  0.        ],
       [-0.70710678,  0.        , -0.70710678],
       [-0.70710678,  0.        ,  0.70710678]])

In [587]: np.allclose(U,y)
Out[587]: True