目录

Storage orders

Constructors

固定尺寸和动态尺寸

块操作


Storage orders

eigen矩阵存储顺序两种,column-major 和 row-major,默认列排列

example:

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;

 Output:

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 

Constructors

默认构造函数不执行任何动态内存分配,

Matrix3f a;
MatrixXf b;

a是一个3x3矩阵,未初始化的数组float[9]。

b是动态大小矩阵,大小为0x0。

支持c++11,可以按如下初始化任意大小的矩阵,

Vector2i a(1, 2);                      // A column vector containing the elements {1, 2}
Matrix<int, 5, 1> b {1, 2, 3, 4, 5};   // A row-vector containing the elements {1, 2, 3, 4, 5}
Matrix<int, 1, 5> c = {1, 2, 3, 4, 5}; // A column vector containing the elements {1, 2, 3, 4, 5}

也可以逗号初始化comma-initializer syntax

Matrix3f m;
m << 1, 2, 3,4, 5, 6,7, 8, 9;

固定尺寸和动态尺寸

什么时候应该使用固定尺寸(例如Matrix4f),什么时候应该使用动态尺寸(例如MatrixXf)?简单的答案是:尽可能对非常小的尺寸使用固定尺寸,并在较大尺寸或必须使用的地方使用动态尺寸。对于小尺寸,尤其是小于(大约)16 的尺寸,使用固定尺寸对性能非常有利,因为它允许Eigen避免动态内存分配和展开循环。在内部,固定大小的Eigen矩阵只是一个普通数组,即

Matrix4f mymatrix;
//really amounts to just doing
float mymatrix[16];

所以这真的有零运行成本。相比之下,动态大小矩阵的数组总是在堆heap上分配,所以这样做

MatrixXf mymatrix(rows,columns);
//amounts to doing
float *mymatrix = new float[rows*columns];

除此之外,该MatrixXf对象将其行数和列数存储为成员变量。

当然,使用固定大小的限制是只有在编译时知道大小时才有可能。此外,对于足够大的尺寸,例如大于(大约)32 的尺寸,使用固定尺寸的性能优势变得可以忽略不计。更糟糕的是,尝试在函数内使用固定大小创建一个非常大的矩阵可能会导致堆栈溢出stack overflow,因为Eigen会尝试将数组自动分配为局部变量,而这通常在堆栈上完成。最后,根据情况,当使用动态大小时, Eigen也可以更积极地尝试向量化(使用 SIMD 指令),请参阅Vectorization。

块操作

块是矩阵或数组的矩形部分。块表达式既可以用作右值,也可以用作左值。与通常的特征表达式一样,只要让编译器进行优化。

两种表示形式:

 Example:

#include <Eigen/Dense>
#include <iostream>int main()
{Eigen::Array22f m;m << 1,2,3,4;Eigen::Array44f a = Eigen::Array44f::Constant(0.6);std::cout << "Here is the array a:\n" << a << "\n\n";a.block<2,2>(1,1) = m;std::cout << "Here is now a with m copied into its central 2x2 block:\n" << a << "\n\n";a.block(0,0,2,3) = a.block(2,1,2,3);std::cout << "Here is now a with bottom-right 2x3 block copied into top-left 2x3 block:\n" << a << "\n\n";
}

Output: 

Here is the array a:
0.6 0.6 0.6 0.6
0.6 0.6 0.6 0.6
0.6 0.6 0.6 0.6
0.6 0.6 0.6 0.6Here is now a with m copied into its central 2x2 block:
0.6 0.6 0.6 0.6
0.6   1   2 0.6
0.6   3   4 0.6
0.6 0.6 0.6 0.6Here is now a with bottom-right 2x3 block copied into top-left 2x3 block:3   4 0.6 0.6
0.6 0.6 0.6 0.6
0.6   3   4 0.6
0.6 0.6 0.6 0.6

eigen 中的matrix相关推荐

  1. Eigen中的混叠(aliasing)问题

    Eigen中的混叠(aliasing)问题 Eigen中aliasing指的是在赋值表达式的左右两边存在矩阵的重叠区域,这种情况下,有可能得到非预期的结果.如mat = 2*mat或者mat = ma ...

  2. [Eigen中文文档] 矩阵与向量运算

    专栏总目录 本文目录 介绍 加法与减法 标量的标量乘法与除法 表达式模板 转置与共轭 (矩阵与矩阵)和(矩阵与向量)的乘积 点积和叉积 基本算术的简化运算 操作的有效性 英文原文(Matrix and ...

  3. Eigen中eulerAngles()得到欧拉角的奇异问题

    Eigen中得到欧拉角的奇异问题 1.1.关于欧拉角范围的定义 欧拉角的实际范围是: roll:[−π,π];pitch:[−π/2,π/2];yaw:[−π,π]roll:[-\pi, \pi];\ ...

  4. 理解CSS3 transform中的Matrix(矩阵)

    一.哥,我被你吓住了 打架的时候会被块头大的吓住,学习的时候会被奇怪名字吓住(如"拉普拉斯不等式").这与情感化设计本质一致:界面设计好会让人觉得这个软件好用! 所以,当看到上面& ...

  5. python中matrix函数_使用python解线性矩阵方程(numpy中的matrix类)

    这学期有一门运筹学,讲的两大块儿:线性优化和非线性优化问题.在非线性优化问题这里涉及到拉格朗日乘子法,经常要算一些非常变态的线性方程,于是我就想用python求解线性方程.查阅资料的过程中找到了一个极 ...

  6. numpy中的matrix与array的区别

    Numpy matrices必须是2维的,但是 numpy arrays (ndarrays) 可以是多维的(1D,2D,3D····ND). Matrix是Array的一个小的分支,包含于Array ...

  7. 【CSS3】 理解CSS3 transform中的Matrix(矩阵)

    理解CSS3 transform中的Matrix(矩阵) by zhangxinxu from http://www.zhangxinxu.com 本文地址:http://www.zhangxinxu ...

  8. Android中图像变换Matrix的原理应用

    第一部分 Matrix的数学原理 在Android中,如果你用Matrix进行过图像处理,那么一定知道Matrix这个类.Android中的Matrix是一个3 x 3的矩阵,其内容如下: Matri ...

  9. html中的matrix属性,transform,matrix属性讲解

    矩阵可以理解为方阵,只不过,平时方阵里面站的是人,矩阵中是数值:  → 而所谓矩阵的计算,就是两个方阵的人(可以想象成古代的方阵士兵)相互冲杀. CSS3中的矩阵 CSS3中的矩阵指的是一个方法,书写 ...

最新文章

  1. caffe转caffe2
  2. Intel Realsense Depth Quality Tool 相关参数
  3. sql2005主从数据库同步配置
  4. boost::fusion::replace_if用法的测试程序
  5. Docker容器(配置+镜像建立及优化+镜像加速器制作)
  6. LOJ#2353 货币兑换
  7. ASP.NET中?和??的用法
  8. 《程序员情商》自我修养必备《论语》
  9. 一种基于JSON语法的JSON数据转换器
  10. 瀚高数据库在Linux上安装,瀚高数据库和postgresql并存,安装瀚高数据库问题的一种解决方案(APP)...
  11. spss 通径分析_使用SPSS线性回归实现通径分析的方法-学习资料.pdf
  12. Easyui datagrid detailview使用简介
  13. 力天创见无感人脸识别方案
  14. linux内核内存管理slub
  15. 【转载】CU、PU、TU划分显示代码
  16. 高德地图(AMap)JavaScript API的使用
  17. 在外部凋用Class中的private函数
  18. 414 Request-URI Too Long 15ms
  19. 一文详解SLAM的主要任务和开源框架
  20. 为什么要抛弃maven

热门文章

  1. 物联网发展从开始到成型,需要经过哪几个阶段?
  2. 手把手教你用Python爬中国电影票房数据
  3. 修改电脑软件默认安装位置、下载位置
  4. Python教程:函数多个返回值与丢弃返回值
  5. 维深集团荣获2004年物流与采购信息化优秀方案大奖
  6. Oracle 用户无法登录 LOCKED(TIMED)
  7. Android Audio FastMixer 实例
  8. 移动设备网页中快速响应单击动作
  9. 刘慈欣:元宇宙将是整个人类文明的一次内卷(英文演讲视频)
  10. 独孤思维:自动裂变赚钱项目,新手小白每月轻松5000+