Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
复制Matlab';python中的SVD_Python_Matlab_Numpy_Scipy_Svd - Fatal编程技术网

复制Matlab';python中的SVD

复制Matlab';python中的SVD,python,matlab,numpy,scipy,svd,Python,Matlab,Numpy,Scipy,Svd,我试图用python重现一些用Matlab编写的大型项目。 我设法重现了大部分结果,但我有一个问题,特别是SVD分解。 (我只看最后一部分。) 在Matlab中: [~, ~, V] = svd([4.719, -17.257, -11.5392; -17.2575, 63.9545, 40.5581; -11.5392, 40.5581, 31.3256]); 这让我得到了以下V: -0.2216 0.0241 -0.9748 0.8081 -0.5549 -0.1974

我试图用python重现一些用Matlab编写的大型项目。 我设法重现了大部分结果,但我有一个问题,特别是SVD分解。 (我只看最后一部分。)

在Matlab中:

[~, ~, V] = svd([4.719, -17.257, -11.5392; -17.2575, 63.9545, 40.5581; -11.5392, 40.5581, 31.3256]);
这让我得到了以下V:

-0.2216    0.0241   -0.9748
0.8081   -0.5549   -0.1974
0.5457    0.8316   -0.1035
在努比:

 np.linalg.svd(np.array([[4.71993, -17.2575, -11.539], [-17.257, 63.954, 40.558], [-11.539, 40.558, 31.325]]))[2]
让我明白:

array([[-0.22159139,  0.80814521,  0.54570924],
       [ 0.02407525, -0.55491709,  0.83155722],
       [ 0.97484237,  0.19740401,  0.10350855]])
这是换位的(正如我认为numpy和matlab之间的预期),但在一些负号上也不同

即使使用opencv(cv2)或scipy(即使使用lapack_driver=“gesvd”),仍然可以得到相同的结果

scipy.linalg.svd(np.array([[4.71993, -17.2575, -11.539], [-17.257, 63.954, 40.558], [-11.539, 40.558, 31.325]]), lapack_driver="gesvd")[2]
我还尝试转置输入矩阵,但变化不大


我知道两个答案都是正确的。但我真的需要得到完全相同的结果才能重现该项目。

在两种环境中,矩阵的表示方式并不相同(数值精度不同)。如果你使用相同的矩阵,它应该是等价的(转置)

用Python

import numpy as np

np.set_printoptions(precision=6)
a=[[4.71993, -17.2575, -11.539], [-17.257, ...
np.linalg.svd(np.array(a))[2]

array([[-0.221591,  0.808145,  0.545709],
       [ 0.024075, -0.554917,  0.831557],
       [ 0.974842,  0.197404,  0.103509]])

4.719!=4.71993
矩阵中的第一个元素
import numpy as np

np.set_printoptions(precision=6)
a=[[4.71993, -17.2575, -11.539], [-17.257, ...
np.linalg.svd(np.array(a))[2]

array([[-0.221591,  0.808145,  0.545709],
       [ 0.024075, -0.554917,  0.831557],
       [ 0.974842,  0.197404,  0.103509]])