Eigen3学习笔记——密集矩阵和数组操作(1)

Eigen3学习笔记

密集矩阵和数组操作

矩阵类

在Eigen中,所有的矩阵和向量都是Matrix类模板的对象。

Matrix的前三个模板参数(与后面一部分内容整合在一起)

Martix一共需要6个参数,前三个必须有的模板参数如下:

Matrix<typename Scalar,
       int RowsAtCompileTime,
       int ColsAtCompileTime,
       int Options = 0,
       int MaxRowsAtCompileTime = RowsAtCompileTime,
       int MaxColsAtCompileTime = ColsAtCompile
参数含义
Scalar指定矩阵内元素的数据类型
RowsAtCompileTime矩阵的行数
ColsAtCompileTime矩阵的列数
Option表明矩阵存储先存行还是列,默认是列优先,Option=RowMajor时,行优先
MaxRowsAtCompileTime动态矩阵的最大行数
MaxColsAtCompileTime动态数组的最大列数,用来解决直到矩阵上限,但具体不确定的情况

为了方便理解会采用typedef取别名,下面是一个示例:

typedef Matrix<float, 4, 4> Matrix4f;
向量

我们直到 向量是矩阵的一种,因此直接通过typedef来定义即可:

typedef Matrix<float, 3, 1> Vector3f;		//列向量,列向量没有Col,!!!!!
typedef Matrix<int, 1, 2> RowVector2i;		//行向量,行向量有Row标识
特殊值Dynamic

EIgen支持大小未知的矩阵,此时对于行和列的定义需要用到Dynamic这个特殊的值(其本身是Eigen里面的量)

typedef Matrix<double, Dynamic, Dynamic> MatrixXd;	//动态矩阵
typedef Matrix<int, Dynamic, 1> VectorXi;			//动态列向量
构造函数

默认构造函数始终存在,默认动态矩阵不分配大小

Matrix3f a;			//分配了3x3
MatrixXf b;			//未分配,0x0

通过传递行和列进行构造:

MatrixXf a(10,15);		//动态大小,通过行列进行构造
VectorXf b(30);			//动态列向量,通过行数进行构造
Matrix3f a(3,3);		//已经指定大小的矩阵依然可以这样做,但输入的参数是无意义的。

通过传递元素进行构造:

Vector2d a(5.0, 6.0);
MatrixXi a {      // construct a 2x2 matrix
      {1, 2},     // first row
      {3, 4}      // second row
};
Matrix<double, 2, 3> b {
      {2, 3, 4},
      {5, 6, 7},
};

注意:用元素和行列进行构造的括号使用是不一样的

矩阵的索引

Eigen 中对矩阵的索引是通过重载括号运算符进行的

MatrixXd m(2,2);
m(0,0) = 3;
m(1,0) = 2.5;
m(0,1) = -1;
m(1,1) = m(1,0) + m(0,1);
通过逗号进行初始化
Matrix3f m;
m << 1, 2, 3,		//一行一行的填写
     4, 5, 6,
     7, 8, 9;
获取矩阵大小和调整动态矩阵大小
MatrixXd m(2,5);		//向量也可以
m.resize(4,3);			//重新定义矩阵大小
m.rows();				//获取矩阵的行数
m.cols();				//获取矩阵的列数

注:固定大小矩阵的大小不能改变,但是为了语法一致性,依然可以使用resize(),只不过没有作用

复制与调整大小
MatrixXf a(2,2);	//a是2x2
MatrixXf b(3,3);	//b是3x3
a = b;				//a是3x3

注:只有左侧是动态矩阵才允许进行这种调整

什么时候使用固定矩阵和动态矩阵呢?
  1. 矩阵尺寸较小(小于16个尺寸,四阶矩阵),使用固定矩阵
  2. 矩阵尺寸较大或必须使用动态矩阵的情况,使用动态矩阵
Eigen定义的Matrix typedefs
  1. Matrix<type, N, N> 的 MatrixNt
  2. Matrix<type, N, 1> 的 VectorNt
  3. Matrix<type, 1, N> 的 RowVectorNt

其中:

  1. N 表示:2,3,4,X(Dynamic)中的一个
  2. t 表示:i(int),f(float),d(double),cf(complex<float>),cd(complex<double>)

学习资料来源:官方文档

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值