Eigen教程(11)之存储顺序
转载于: 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表示列优先。默认是列优先。
如何选择存储方式呢?
- 如果要和其他库合作开发,为了转化方便,可以选择同样的存储方式。
- 应用中涉及大量行遍历操作,应该选择行优先,寻址更快。反之亦然。
- 默认是列优先,而且大多库都是按照这个顺序的,默认的不失为较好的。
总结
本来想春节前任务比较少,翻译完所有的Eigen系列的。但是我的目的是为了使用google的非线性优化库ceres,介绍了这些基本知识也够用了,如果遇到不清楚的函数可以直接到Eigen的官网查询。
这个系列很简单,只是入门。有更深理解了再续写。
Eigen教程(11)之存储顺序相关推荐
- Eigen教程(1)
Eigen学习(1) The Matrix class(Matrix的类) 在 Eigen 中,所有矩阵,向量都是 Matrix 模板类的对象.向量只是矩阵的一种特殊情况:1 行或1 列. Matri ...
- Eigen教程:1 Eigen简介和矩阵常见操作
文章目录 一. 模块和头文件 二. 矩阵 1. 矩阵类型 2. 数据存储 3. 动态矩阵和静态矩阵 4. 矩阵元素的访问 5. 设置矩阵的元素 6. 重置矩阵大小 7. 矩阵和向量的算术运算 8. 行 ...
- Eigen教程1 - 基础
Eigen教程1 - 基础 参考:https://blog.csdn.net/xuezhisdc/article/details/54619853 固定大小的矩阵和向量 /** 参考链接:http:/ ...
- MONGODB 数据的存储顺序发现不是按_ID 的顺序存储的原因
在查询一个表的数据时发现查询返回的数据中_id 字段的值的排序是乱的.并没有 按整数数据进行排序,这里做一些说明: 在MONGODB 中,如果没有加sort,返回的是数据原始存储的顺序,和下面 ...
- c语言程序设计的顺序结构的常用控制语句,C语言程序设计教程-第03课-顺序结构的程序设计.ppt...
<C语言程序设计教程-第03课-顺序结构的程序设计.ppt>由会员分享,可在线阅读,更多相关<C语言程序设计教程-第03课-顺序结构的程序设计.ppt(21页珍藏版)>请在人人 ...
- Eigen教程(2)之Matrix,Vectors, Dynamic介绍
转载于:https://www.cnblogs.com/houkai/p/6347648.html Matrix类 在Eigen,所有的矩阵和向量都是Matrix模板类的对象,Vector只是一种特殊 ...
- Eigen教程(1)之简介
转载于: https://www.cnblogs.com/houkai/p/6347408.html Eigen是一个用于矩阵运算的跨平台C++库. 安装 下载eigen:https://gitlab ...
- matlab设计菜单教程,MATLAB程序设计教程(11)——MATLAB图形用户界面设计
MATLAB程序设计教程(11)--MATLAB图形用户界面设计 第11章 MATLAB图形用户界面设计 11.1 菜单设计 11.2 对话框设计 11.3 图形用户界面设计工具 11.1菜单 ...
- ArcGIS二次开发基础教程(11):网络分析之最短路径分析
ArcGIS二次开发基础教程(11):网络分析之最短路径分析 最短路径分析 这里直接调用了在mdb中建立好的网络数据集 //全局变量 private INetworkDataset my_networ ...
最新文章
- Shell基础学习笔记
- 10 行 Python 代码写的模糊查询
- 对网上花店系统进行软件测试,网上花店系统
- 编程软件python下载-Python 2.7.6编程软件免费下载
- 函数防抖和函数节流的最简单解释
- python创建按钮_掌握Python之Tkinter按钮组件的创建及使用
- Vue项目开发目录结构和引用调用关系
- 2014届华为校园招聘机试题2
- Can't load AMD 64-bit .dll on a IA 32-bit platform
- maven 项目 missing jdk.tools.jar
- Ubuntu 12.04下Pomelo开发环境搭建(转)
- 循环删除list中多个元素
- 【STM32】STM32驱动 LCD12864程序代码(串行方式)
- 快手上市,有一批员工平均身家超3200万,但追赶抖音没那么简单
- utools插件合集 v1.3.5绿色版
- 使用Caffe框架训练模型
- js弹窗确认取消php,JS实现删除时的确认弹窗
- libigl cot laplacian 计算方式
- 执行DBMS_SQLTUNE优化sql或dbms_stats收集统计信息报错:ORA-20003
- html自我介绍怎么弄,用html设计一个自我介绍的静态网页
热门文章
- Oracle 11gR2 RAC TNS-12542: TNS:address already in use 故障一例
- 防止图片盗链和资源恶意下载
- 配置web监控及报警
- Windows下的良心软件
- linux shell使用tar 备份时间命名的文件 ( tar命令)
- oracle影响性能,影响Oracle性能的几个重要参数
- vue多单页面多tab_vue-cli3创建多页面项目
- Cannot set property ‘innerHTML‘ of null 问题的解决
- spring读取多个配置properties报错“Could not resolve placeholder“的解决方案
- 记录一次nginx502/504问题解决过程