本人c++小白,一直在用c++的形式来写c。。。今天试了一下据说速度很快Eigen,可是随意求一3×3矩阵特征值的编译时长都超过10秒。。。而且所求的特征值貌似不支持复数,只显示其实部。在matlab里求同样的矩阵的特征值都是秒出结果。请教下各位大大们哪些库能快速处理矩阵?能达到matlab处理时间的就行。
|
txxNov 8, 2013
1
3*3的矩阵 10秒.......开玩笑啊 时间复杂度也就N^2啊...
|
|
dndxNov 8, 2013 via iPhone
3
估计是使用方法不对吧,3 X 3 都要10秒,这比手算也快不到哪去了。
|
|
qiukunNov 8, 2013
4
编译时长?
|
|
forest520Nov 8, 2013 via Android
5
clapack吧,这个最原始,编译最简单
|
|
46foNov 8, 2013
9
第一次 编译久 之后就不会了吧
|
|
10
估计又是header only, template满天飞的东西所以编译慢. (据说一哥们用spirit写了个scheme解释器, build出来要半小时
|
|
12
哥,如果include的template或者header很多,编译时长超过10秒很正常啊,之后再编译应该就快了啊。
你最主要的还是要看运行速度啊,如果运行速度没问题,那就OK了嘛。 |
|
skydiverNov 8, 2013
14
一直在用c++的形式来写c。。。这是什么意思。。能编译么。。
|
|
15
@ini 比如
#include <iostream> #include <Eigen/Eigen> using namespace Eigen; using namespace std; int main() { Matrix3d a(3,3); a<< 1,0,0, 0,1,0, 0,0,1; cout << "a: " << endl << a << endl; cout << "eigenvalue: " <<endl<< a.eigenvalues() << endl; } 这个都能20s ...真是服了 |
|
iniNov 8, 2013
18
@omengye 我去,一不小心敲了XX,然后就莫名其妙地回复了。。
我刚看了一下这个lib,<Eigen/Eigen>里include了Dense,下面是Dense header里面的include: ``` #include "Core" #include "LU" #include "Cholesky" #include "QR" #include "SVD" #include "Geometry" #include "Eigenvalues" ``` 再随便打开Core这个header,里面又include了一大堆,以"src/Core/PlainObjectBase.h"为例,再打开这个header only的源文件,里面全是template,这能不慢么。。 表面看起来,只include了一个<Eigen/Eigen>,但这只是这个lib为了方便,做了一个统一的header,其实里面所有的内容都被包含了,所以,如果你要编译速度,你可以只include你需要的那个header,应该就会好很多了。 ---------------------------------- 另外,你说除了第一次以外,以后编译也很慢,你是只有一个main.cpp么? |
|
iniNov 8, 2013
19
发现V2EX不支持markdown嘛,看起来好像支持markdown的样子。。
|
|
RicepigNov 8, 2013
22
所以build和clean后再build对C/C++来说,时间差异很大
|
|
weigetcNov 8, 2013
23
|
|
xiaketNov 8, 2013
24
Intel的Math Kernel Library, 这个省心, 常见的BLAS, LAPACK什么的都集成到里面了.
正确使用的话, 速度比MATLAB快应该是可以肯定的. |
|
bububutNov 8, 2013
25
目前在用这个
http://arma.sourceforge.net/ 一般人家说某某库速度快是指运行速度快吧,编译速度快这个要求倒是比较难考察 如果你是常常要改变矩阵值的话,直接写个读文件的程序,就不用每次都编译啦 为什么不直接拿matlab算呢 |
|
cdfmrNov 8, 2013
26
使用预编译头文件可以提高编译速度
|
|
ispinfxNov 8, 2013
30
别搞笑了。。毕业设计的时候自己写的求6W阶的特征值都都用不了几秒。
|