我必须对矩阵进行SVD,但它有一些错误,在以下示例中U[1][1]
,U[2][1]
和U[2][0]
应为0
。
问题是上面的例子只是一个测试,我必须使用大型矩阵,这些矩阵不会很好,我能做些什么才能相信我得到的结果?
答案 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