【问题标题】:How to speed up c++ eigen decomposition如何加快c++特征分解
【发布时间】:2013-10-08 02:18:53
【问题描述】:

我用MATLAB做特征值分解,数据的维数约为10000,所以协方差矩阵为10000*10000。当我在 MATLAB 中使用eig() 函数时,它非常慢。有什么方法可以加快特征值分解。 我使用特征值分解来做主成分分析(PCA),所以我只使用前K个特征值和特征向量。不需要获取所有的特征值和特征向量。我曾尝试使用Intel-MKL 进行特征分解,但是当我使用mex 接口时,出现了一些错误。我把它贴在链接https://stackoverflow.com/questions/19220271/how-to-use-intel-mkl-for-speed-my-own-matlab-mex-cpp-applications

请给我一些建议,谢谢。

【问题讨论】:

    标签: matlab pca eigenvector intel-mkl


    【解决方案1】:

    如果您的数据稀疏,或者如果您对第一个 k 值感兴趣,请使用 eigs。例如, eigs(A,k) 返回 k 个最大幅度特征值。请注意,eigs 仅对于前几个特征值会更快,而对于 k > 某个值(可能是 5...)会更慢

    【讨论】:

    • 好的,谢谢。但是我想用c++,因为MATLAB是非免费的。
    • MKL 也不是免费的,用于研究和商业目的。
    • 那我需要自己写eig函数吗?我知道一些用于这些计算的开源库,例如 OpenBLAS、LAPACK 等。但它们没有可调用的 eig 函数。
    • LAPACK 定义了特征值和特征向量的例程(或查看 Armadillo 库以获得更多类似 C++ 的接口)。你也可以使用 GNU Octave
    • @nathan - eigs(A,k) 不仅不如eig(A) 准确,而且速度更慢。测试一下,自己看看。
    猜你喜欢
    • 1970-01-01
    • 2019-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-25
    • 2014-10-12
    相关资源
    最近更新 更多