Eigen教程(11)之存储顺序

转载于:  https://www.cnblogs.com/houkai/p/6349991.html

存储顺序

对于矩阵和二维数组有两种存储方式,列优先和行优先。

假设矩阵:

img

按行优先存储,内存中形式如下:

8 2 2 9 9 1 4 4 3 5 4 5

列优先,内存格式:

8 9 3 2 1 5 2 4 4 9 4 5

Matrix<int, 3, 4, ColMajor> Acolmajor;
Acolmajor << 8, 2, 2, 9,
             9, 1, 4, 4,
             3, 5, 4, 5;
cout << "The matrix A:" << endl;
cout << Acolmajor << endl << endl; 
cout << "In memory (column-major):" << endl;
for (int i = 0; i < Acolmajor.size(); i++)
  cout << *(Acolmajor.data() + i) << "  ";
cout << endl << endl;
Matrix<int, 3, 4, RowMajor> Arowmajor = Acolmajor;
cout << "In memory (row-major):" << endl;
for (int i = 0; i < Arowmajor.size(); i++)
  cout << *(Arowmajor.data() + i) << "  ";
cout << endl;

输出

The matrix A:
8 2 2 9
9 1 4 4
3 5 4 5

In memory (column-major):
8  9  3  2  1  5  2  4  4  9  4  5  

In memory (row-major):
8  2  2  9  9  1  4  4  3  5  4  5 

PlainObjectBase::data()函数可以返回矩阵中第一个元素的内存位置。

存储顺序及选择

Matrix类模板中可以设定存储的方向,RowMajor表示行优先,ColMajor表示列优先。默认是列优先。

如何选择存储方式呢?

  1. 如果要和其他库合作开发,为了转化方便,可以选择同样的存储方式。
  2. 应用中涉及大量行遍历操作,应该选择行优先,寻址更快。反之亦然。
  3. 默认是列优先,而且大多库都是按照这个顺序的,默认的不失为较好的。

总结

本来想春节前任务比较少,翻译完所有的Eigen系列的。但是我的目的是为了使用google的非线性优化库ceres,介绍了这些基本知识也够用了,如果遇到不清楚的函数可以直接到Eigen的官网查询。

这个系列很简单,只是入门。有更深理解了再续写。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值