Eigen::Map 拷贝

Map是Eigen中一个非常有用却又很容易被忽略的类,可以用它避免很多不必要的内存拷贝,举个例子,你手头有一个std::vector<Eigen::Vector3d> pts的数据,你需要将这个数据转化成一个n*3的矩阵,以便进行后续的矩阵计算,你会怎么做?

最直接的想法是这样的:

 MatrixXd mat(pts.size(), 3);
 for(int i = 0; i < pts.size(); ++i){
     mat.row(i) << pts[i];
 }

但问题是当pts数据量较大时,通过这种方式会在数据拷贝上浪费不少时间。其实完全可通过Map避免这种不必要的时间浪费。用上Map后上述代码用一句即可代替:

 Map<MatrixXd, 0, OuterStride<3>> mat(pts.data()->data(), pts,size(), 3);

是不是很简单,同时还不会有内存构造和赋值的时间消耗,怎么做到的呢?

可以参考下面的链接:

https://zhuanlan.zhihu.com/p/348622852

http://eigen.tuxfamily.org/dox-devel/classEigen_1_1Map.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值