稀疏矩阵求最小或最大的K个特征值及其特征向量

本文介绍了如何处理一个5000*5000的稀疏矩阵,每行只有4个非零值的问题。通过OpenCV和Matlab的eigs()函数,作者发现可以快速求解最小的k个特征值和特征向量。进一步研究发现,Matlab采用了Arnoldi算法和ARPACK库。在VS环境下编译ARPACK遇到困难,包括make lib无响应、缺少msys-iconv-2.dll文件、错误地用patch SRC覆盖原有SRC等问题。通过安装mingw32-libiconv和正确应用patch解决了问题,最终成功生成.dll和.lib文件并实现了功能。
摘要由CSDN通过智能技术生成

       本人挤牙膏试的文笔,没有习惯写博客,为了方便以后遇到这个问题不要重头再来,也为了有可能能给其他小伙伴一些建议,还是决定整理整理思路,努力写篇大家看得懂的笔记吧。

      由于我要处理的问题是求一个5000*5000维度矩阵的最小特征向量,我的矩阵有个特点,虽然维度大,但是没行只有4个非零值,很稀的矩阵,有点像食堂的免费汤里的蛋花,OpenCV有个函数

 CVAPI(void)  cvEigenVV( CvArr* mat, CvArr* evects, CvArr* evals,double eps CV_DEFAULT(0), int lowindex CV_DEFAULT(-1), int highindex CV_DEFAULT(-1))是可以求对称矩阵的特征值和特征向量,它不争气的求了将近一个小时,还是没有给出结果。为了这一个特征向量,费这么大劲,逼着我去找解决的方法。 

       Matlab有个函数eigs(),可以求最小的k个特征值及其对应的特征向量,配上sparse矩阵,这个问题大约只用到几秒,于是想查查,matlab到底用了什么算法,怎么能这么给力呢。matlab很直白的告诉我们说,我用了Arnoid算法,还有个包,ARPACK包。

     于是,转战ARPACK,ARPACK是fortran语言写的,我是用VS开发,这显然又给我出难题了,google搜了很久,发现有个哥们直接开悬赏帖,让我有些没有底气了,难道真的这么难搞定吗?没有办法,工作需要,硬着头皮搞。

    这个哥们的博客&

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值