Eigen中Map的高级用法

5 篇文章 0 订阅
[size=large]Map类 是 矩阵库Eigen中用来将内存数据 映射为 任意形状的矩阵的类。
其基本用法参见:[url]http://cherishlc.iteye.com/blog/1968238[/url]
Map的官方文档:[url]http://eigen.tuxfamily.org/dox/group__TutorialMapClass.html[/url]
Stride类的官方文档:[url]http://eigen.tuxfamily.org/dox/classEigen_1_1Stride.html[/url]

这里给出其最为灵活的用法的一个示例:
将一个矩阵的第一行copy到另一个矩阵(要是Eigen有reshape函数就不用这么麻烦了。。。别说,还真有!可以用resize代替~~)
先上结果:[/size]
[img]http://dl2.iteye.com/upload/attachment/0101/1628/06f5ec6c-f6a2-3ccd-bfca-1752defbcd72.png[/img]

[size=large]附上代码:[/size]
#include <Eigen/Core>
#include <iomanip>
#include <iostream>

using std::setw;
#define printlnExp(exp) std::cout<<std::left<<setw(30)<<(std::string(#exp)+" 为:")<<std::endl<<(exp)
#define printlnExpln(exp) printlnExp(exp)<<std::endl

void main() {
using namespace Eigen;
MatrixXd m (4, 6);
for (int i = 0; i < m.size(); ++i) {
m (i) = i;
}
printlnExpln (m);
MatrixXd msub (2, m.cols() / 2);
//将 m 的第一行存入 msub中。 Stride 的第一个参数为OuterStride,对于按列优先存储的矩阵来说,就是 列与列之间指针的差值; 第二个参数为InnerStride,即两个相邻元素 指针之间的差值
msub = Map<MatrixXd, 0, Stride<Dynamic, Dynamic> > (m.data(), msub.rows(), msub.cols(), Stride<Dynamic, Dynamic> (m.rows() * msub.rows(), m.rows() ) );
printlnExpln (msub);


//
MatrixXd msub2 = m.row (0);
msub2.resize (2, m.cols() / 2);//将resize函数作为reshape函数使用,可以达到同样的效果, 是不是觉着很爽啊~ 但是反过来,,,不可能用此方法去给m的第一行赋值
printlnExpln (msub2);
//

//以下方法显然是错的。。。
MatrixXd msub3 (2, m.cols() / 2);
msub3 = m.row (0);
printlnExpln (msub3) << std::endl;


std::cout << "以下是测试将m的第一行置为msub中的相反数" << std::endl << std::endl;
m.row (0) = -MatrixXd::Map (msub.data(), 1, m.cols() );
//m.row(0) = -Map<MatrixXd>(msub.data(), 1, m.cols());//这样写也行
printlnExpln (m);
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值