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

存储顺序

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

假设矩阵:

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

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 5In 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的官网查询。

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

Eigen教程(11)之存储顺序相关推荐

  1. Eigen教程(1)

    Eigen学习(1) The Matrix class(Matrix的类) 在 Eigen 中,所有矩阵,向量都是 Matrix 模板类的对象.向量只是矩阵的一种特殊情况:1 行或1 列. Matri ...

  2. Eigen教程:1 Eigen简介和矩阵常见操作

    文章目录 一. 模块和头文件 二. 矩阵 1. 矩阵类型 2. 数据存储 3. 动态矩阵和静态矩阵 4. 矩阵元素的访问 5. 设置矩阵的元素 6. 重置矩阵大小 7. 矩阵和向量的算术运算 8. 行 ...

  3. Eigen教程1 - 基础

    Eigen教程1 - 基础 参考:https://blog.csdn.net/xuezhisdc/article/details/54619853 固定大小的矩阵和向量 /** 参考链接:http:/ ...

  4. MONGODB 数据的存储顺序发现不是按_ID 的顺序存储的原因

    在查询一个表的数据时发现查询返回的数据中_id 字段的值的排序是乱的.并没有 按整数数据进行排序,这里做一些说明:     在MONGODB 中,如果没有加sort,返回的是数据原始存储的顺序,和下面 ...

  5. c语言程序设计的顺序结构的常用控制语句,C语言程序设计教程-第03课-顺序结构的程序设计.ppt...

    <C语言程序设计教程-第03课-顺序结构的程序设计.ppt>由会员分享,可在线阅读,更多相关<C语言程序设计教程-第03课-顺序结构的程序设计.ppt(21页珍藏版)>请在人人 ...

  6. Eigen教程(2)之Matrix,Vectors, Dynamic介绍

    转载于:https://www.cnblogs.com/houkai/p/6347648.html Matrix类 在Eigen,所有的矩阵和向量都是Matrix模板类的对象,Vector只是一种特殊 ...

  7. Eigen教程(1)之简介

    转载于: https://www.cnblogs.com/houkai/p/6347408.html Eigen是一个用于矩阵运算的跨平台C++库. 安装 下载eigen:https://gitlab ...

  8. matlab设计菜单教程,MATLAB程序设计教程(11)——MATLAB图形用户界面设计

    MATLAB程序设计教程(11)--MATLAB图形用户界面设计 第11章  MATLAB图形用户界面设计 11.1  菜单设计 11.2  对话框设计 11.3  图形用户界面设计工具 11.1菜单 ...

  9. ArcGIS二次开发基础教程(11):网络分析之最短路径分析

    ArcGIS二次开发基础教程(11):网络分析之最短路径分析 最短路径分析 这里直接调用了在mdb中建立好的网络数据集 //全局变量 private INetworkDataset my_networ ...

最新文章

  1. Shell基础学习笔记
  2. 10 行 Python 代码写的模糊查询
  3. 对网上花店系统进行软件测试,网上花店系统
  4. 编程软件python下载-Python 2.7.6编程软件免费下载
  5. 函数防抖和函数节流的最简单解释
  6. python创建按钮_掌握Python之Tkinter按钮组件的创建及使用
  7. Vue项目开发目录结构和引用调用关系
  8. 2014届华为校园招聘机试题2
  9. Can't load AMD 64-bit .dll on a IA 32-bit platform
  10. maven 项目 missing jdk.tools.jar
  11. Ubuntu 12.04下Pomelo开发环境搭建(转)
  12. 循环删除list中多个元素
  13. 【STM32】STM32驱动 LCD12864程序代码(串行方式)
  14. 快手上市,有一批员工平均身家超3200万,但追赶抖音没那么简单
  15. utools插件合集 v1.3.5绿色版
  16. 使用Caffe框架训练模型
  17. js弹窗确认取消php,JS实现删除时的确认弹窗
  18. libigl cot laplacian 计算方式
  19. 执行DBMS_SQLTUNE优化sql或dbms_stats收集统计信息报错:ORA-20003
  20. html自我介绍怎么弄,用html设计一个自我介绍的静态网页

热门文章

  1. Oracle 11gR2 RAC TNS-12542: TNS:address already in use 故障一例
  2. 防止图片盗链和资源恶意下载
  3. 配置web监控及报警
  4. Windows下的良心软件
  5. linux shell使用tar 备份时间命名的文件 ( tar命令)
  6. oracle影响性能,影响Oracle性能的几个重要参数
  7. vue多单页面多tab_vue-cli3创建多页面项目
  8. Cannot set property ‘innerHTML‘ of null 问题的解决
  9. spring读取多个配置properties报错“Could not resolve placeholder“的解决方案
  10. 记录一次nginx502/504问题解决过程