重新认识Eigen C++库

重新认识Eigen C++库

2015.02.26 11:06* 字数 646 阅读 1360 评论 0

Eigen是我之前为写一个通用的数学工具库时了解并第一次使用的,但当时只是随意的一用,甚至没有仔细研究它的编译方法,这也让我对它的使用产生了一些误解。最大的一个误解便是以为它是需要使用cmake进行编译才可以使用的,原因是之前所做工程和Eigen本身都是cmake管理的,于是便留下了这个想当然的概念。

一个结果就是,在前段时间为一个特定工程编写一个数据分析库时,为求和他人的Qt程序(使用qmake)兼容,我错误的认为把“cmake管理”的Eigen库加入进来会很麻烦,便把之前用Eigen矩阵已然写好的拟合计算类(属于我之前所做的工具库)进行改造,换用了标准C++下的vector(矩阵就用vector<vector>嵌套实现)。虽然实现了,但效率方面、性能方面都显然不理想,而且这明显是一种错误的改造方向(由高效、便捷到低效、繁杂)。

于是在这个假期的空档,我决定研究一下,把Eigen编译成一个第三方库来使用的。但两年之后重新看Eigen的帮助,才惊异的发现它是不依赖cmake的,仅需要加入头文件,换句话说其源码应该是封装在头文件中的……我一边为自己之前白费的力气惋惜,一方面开始构想回去工作之后,第一件事就是把Eigen换回来。这样,当年仅凭兴趣写下的整个工具库都可以在真实的工程中得到应用和验证,也可以重新来学习一下Eigen的使用(话说当年看的也太粗糙了)。

另一个发现就是Eigen中矩阵和向量类的灵活性大大的超出了我曾经的理解,不仅可以适配任意的维度和数据类型,而且可以对行和列分别进行控制,即行和列都可以自由的指定为固定长度或动态长度。这样,在仅有一个维度确定的情况下,也可以通过固定其长度来提高计算效率,如下所示:

Matrix<double, 6, Dynamic>                  // Dynamic number of columns (heap allocation)
Matrix<double, Dynamic, 2>                  // Dynamic number of rows (heap allocation)

此外,我还发现,只要加入Eigen::initParallel(),Eigen就可以利用OpenMP的API来进行多核计算。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值