python_SVD_matlab版svd(U*S*V^T) & python版numpy.linalg.svd(U*S*V)
来源:互联网 发布:淘宝限时特价 编辑:程序博客网 时间:2024/06/10 22:59
下面是两个测试,同样的数据,不同的版本,请诸君仔细看来:
1.Matlab版SVD分解
- H = [3.16991321031250,52.4425641326457,2.73475152482102;-8.76695007100685,43.4831885343255,-37.1705395356264;-1.59218748085971,-24.3510937156625,12.8339630267640];
- [U,S,V] = svd(H);
H = [3.16991321031250,52.4425641326457,2.73475152482102;-8.76695007100685,43.4831885343255,-37.1705395356264;-1.59218748085971,-24.3510937156625,12.8339630267640];[U,S,V^T] = svd(H);
得出来的结果
U =
0.6124 0.7695 -0.1814
0.7073 -0.6357 -0.3091
-0.3531 0.0610 -0.9336
V =
-0.0479 0.2651 0.9630
0.9249 0.3759 -0.0575
-0.3772 0.8880 -0.2631
S =
77.2740 0 0
0 29.8639 0
0 0 3.7601
2.Python版SVD分解
- from numpy import *
- def test():
- Base = array([[1.92028349427775,0.938200267748656,8.61139811393332,6.71431139674026,3.47712671277525,2.62145317727807,2.42785357820962,3.59228210401861],[1.38874202829155,5.25404403859336,4.84853333552102,7.41257943454207,1.49997253831683,0.444540922782385,4.42402313001943,7.36340074301202],[6.96266337082995,5.30344218392863,3.93456361215266,5.20052467390387,5.86092067231462,7.54933267231179,6.87796085120107,3.94707475278763]])
- U, S, V = linalg.svd(H)
- if __name__==‘__main__’:
- test()
from numpy import *def test(): Base = array([[1.92028349427775,0.938200267748656,8.61139811393332,6.71431139674026,3.47712671277525,2.62145317727807,2.42785357820962,3.59228210401861],[1.38874202829155,5.25404403859336,4.84853333552102,7.41257943454207,1.49997253831683,0.444540922782385,4.42402313001943,7.36340074301202],[6.96266337082995,5.30344218392863,3.93456361215266,5.20052467390387,5.86092067231462,7.54933267231179,6.87796085120107,3.94707475278763]]) U, S, V = linalg.svd(H) if __name__=='__main__': test()得出的结果
U =
array([[ 0.61236946, 0.7694889 , -0.18135734],
[ 0.70732576, -0.63574186, -0.30906725],
[-0.35312027, 0.06098463, -0.93358821]])
V =
array([[-0.04785176, 0.92488861, -0.37721515],
[ 0.26505669, 0.37586648, 0.88795796],
[ 0.96304473, -0.05749305, -0.26313379]])
S =
array([ 77.27402814, 29.86391746, 3.76009282])
array([[ 0.61236946, 0.7694889 , -0.18135734],
[ 0.70732576, -0.63574186, -0.30906725],
[-0.35312027, 0.06098463, -0.93358821]])
V =
array([[-0.04785176, 0.92488861, -0.37721515],
[ 0.26505669, 0.37586648, 0.88795796],
[ 0.96304473, -0.05749305, -0.26313379]])
S =
array([ 77.27402814, 29.86391746, 3.76009282])
请注意,两者得出的U和S都是一致的,但是得出的V却是转置关系!!
在科学研究中,这不算是一个是个大问题,可是这一个小小的转置却给我带来了非常大的麻烦,这个svd分解只是我代码中很小的一部分,但是就是这个“转置”,浪费了我很多时间。
Python是一个伟大的语言,扩展之丰富那可谓“只有你想不到的,没有他不存在的!”,可是有时候多反而会闲的稍显杂乱,例如科学计算中我们经常用到numpy和scipy这两个库,可是这两个库却存在着大量相同的函数,你有你的numpy.pi,我有我的scipy.pi,你有求逆,我也有求逆,你又svd,我也有。。。重复的却标准不统一便造成了极大的不便。
阅读全文
0 0
- python_SVD_matlab版svd(U*S*V^T) & python版numpy.linalg.svd(U*S*V)
- 矩阵转置 [u,s,v]=svd(a)
- java泛型中的E,K,V,T,U,S
- cvSVD(&A, &U, &S, &V, CV_SVD_U_T);
- java 泛型类型 E K N T V S U
- N o v e m b e r 6 t h T u e s d a y
- N o v e m b e r 8 t h T h u r s d a y
- N o v e m b e r 1 3 t h T u e s d a y
- N o v e m b e r 2 0 t h T u e s d a y
- N o v e m b e r 2 7 t h T u e s d a y
- N o v e m b e r 2 9 t h T h u r s d a y
- "Algorithms" by S. D., C.H. P., and U.V. V., recommended
- ROR v.s. Django@Python
- 优化公式T=S/V
- Visual Studio 2012上使用共享配置项propertysheet
- U/V-Net Brief
- Lustre V.S. Hadoop V.S. Gluster
- Program v/s Process v/s Thread
- 文件存储方案对比
- 集合框架—ArrayList集合
- cmd里面快速粘贴复制的设置方式以及初始位置设置
- python+selenium子元素一致父元素不一致的定位处理
- 3.shell传递参数&&数组
- python_SVD_matlab版svd(U*S*V^T) & python版numpy.linalg.svd(U*S*V)
- Hive_命令
- java实现二维码-生成带log的二维码
- selenium+robot接口测试:post请求
- 常用js,jQuery笔记
- leetcode解题方案--055--jumpGame
- ReID via Ranking Aggregation of Similarity Pulling and Dissimilarity Pushing
- 解决iptables重启失效问题
- mybatis执行批量更新batch update 的方法(oracle,mysql)