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
标签:Map,Eigen,mat,拷贝,pts,size From: https://www.cnblogs.com/spacerunnerZ/p/16980981.html