我目前正在尝试使用armadillo将matlab代码转换为C ++。我通过遵循aramdillo文档到C ++来转换了一些matlab代码。然而,与matlab相比,性能令人失望。
在Matlab中,大小(625x625)的矩阵A反转大约需要0.1秒,相比之下,C ++中的大小超过3秒。
在C ++中,我尝试了两种
solve()
以及
inv()
我意识到 inv 会产生不太准确的结果,因此我不喜欢使用它。此外,我真的需要矩阵A的逆,因为我在算法后面使用对角线元素。
产生这些结果的代码:
Matlab的
x=A\b
invA = A\eye(size(A))
C ++
arma::mat x = solve(A,b)
arma::mat invA = solve(A,eye(625,625))
我使用的版本:
C ++:
Visual Studio 2013
Armadillo 8.300.1
Matlab的:
matlab 2016b
version -blas
针对英特尔(R)64架构应用的英特尔(R)数学核心库版本11.3.1产品构建20151021,CNR分支AVX2
英特尔(R)数学核心库版本11.3.1产品构建20151021,用于英特尔(R)64架构应用程序,CNR分支AVX2 线性代数PACKage版本3.5.0
有没有人知道如何使用armadillo克服C ++中的这种速度不足?
答案 0 :(得分:0)
您是否尝试过:添加到您的代码#ARMA_USE_LAPACK?这允许您的代码使用更优化的.inv()函数版本。另请查看文档:{{3}}