有哪些易用的c++矩阵库?

2013-11-08 00:33:06 +08:00
 omengye
本人c++小白,一直在用c++的形式来写c。。。今天试了一下据说速度很快Eigen,可是随意求一3×3矩阵特征值的编译时长都超过10秒。。。而且所求的特征值貌似不支持复数,只显示其实部。在matlab里求同样的矩阵的特征值都是秒出结果。请教下各位大大们哪些库能快速处理矩阵?能达到matlab处理时间的就行。
7498 次点击
所在节点    程序员
35 条回复
txx
2013-11-08 00:43:58 +08:00
3*3的矩阵 10秒.......开玩笑啊 时间复杂度也就N^2啊...
omengye
2013-11-08 00:47:03 +08:00
@txx msvc mingw都试过了。。。不知为何
dndx
2013-11-08 04:57:56 +08:00
估计是使用方法不对吧,3 X 3 都要10秒,这比手算也快不到哪去了。
qiukun
2013-11-08 07:55:18 +08:00
编译时长?
forest520
2013-11-08 07:57:14 +08:00
clapack吧,这个最原始,编译最简单
omengye
2013-11-08 08:32:35 +08:00
@dndx 我看它文档上写的只需要添加eigen的include目录就可以用了
omengye
2013-11-08 08:35:05 +08:00
@qiukun 是的,有哪里不对么
omengye
2013-11-08 08:35:57 +08:00
@forest520 谢谢,我试一试
xdeng
2013-11-08 09:45:57 +08:00
第一次 编译久 之后就不会了吧
Golevka
2013-11-08 09:46:25 +08:00
估计又是header only, template满天飞的东西所以编译慢. (据说一哥们用spirit写了个scheme解释器, build出来要半小时
omengye
2013-11-08 10:09:16 +08:00
@xdeng 还是会...
ini
2013-11-08 10:12:30 +08:00
哥,如果include的template或者header很多,编译时长超过10秒很正常啊,之后再编译应该就快了啊。
你最主要的还是要看运行速度啊,如果运行速度没问题,那就OK了嘛。
omengye
2013-11-08 10:14:54 +08:00
@Golevka 是的,确实是这样子.有什么建议么?
skydiver
2013-11-08 10:19:43 +08:00
一直在用c++的形式来写c。。。这是什么意思。。能编译么。。
omengye
2013-11-08 10:30:52 +08:00
@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 ...真是服了
omengye
2013-11-08 10:38:10 +08:00
@skydiver 比如用vector写循环之类的,见笑了
ini
2013-11-08 10:40:35 +08:00
ini
2013-11-08 10:51:12 +08:00
@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么?
ini
2013-11-08 10:52:32 +08:00
发现V2EX不支持markdown嘛,看起来好像支持markdown的样子。。
omengye
2013-11-08 11:04:23 +08:00
@ini 是只有一个main.cpp, 太感谢了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/88473

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX