用python再现Matlab的SVD

2024-05-19 03:02:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用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:

^{pr2}$

在纽比:

 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]

我还试着转置输入矩阵,结果变化不大。在

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


Tags: numpydrivernpscipyarraysvdmatlab大型项目
1条回答
网友
1楼 · 发布于 2024-05-19 03:02:04

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

>> a=[[4.71993, -17.2575, -11.539]; [-17.257, ...
a =

    4.7199  -17.2575  -11.5390
  -17.2570   63.9540   40.5580
  -11.5390   40.5580   31.3250

>> [~,~,v]=svd(a);
>> v'
ans =

  -0.221591   0.808145   0.545709
   0.024075  -0.554917   0.831557
   0.974842   0.197404   0.103509

用Python

^{pr2}$

相关问题 更多 >

    热门问题