博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Eigen学习笔记2-Matrix类
阅读量:4622 次
发布时间:2019-06-09

本文共 2219 字,大约阅读时间需要 7 分钟。

  在Eigen中,所有的矩阵Matrix和向量Vector都是由Matrix类构造的。向量只不过是矩阵的特殊形式,只有一列(列向量)或者一行。

  Matrix模板类有6个参数,其中前三个参数是必须的。前三个参数如下:

  Matrix<typename Scalar,int RowsAtCompileTime,int ColsAtCompileTime >

  Scalar 是 标量类型,取值可以是 float ,int double 等。

  RowsAtCompileTime 和 ColsAtCompileTime 是在程序编译时就已经知道的矩阵的行数和列数。

  Eigen 提供了一些常用的 定义好的类型。比如:

  typedef Matrix<float,4,4> Matrix4f .

  

  在Eigen中,列向量是默认向量,在不特别说明的情况下,向量Vector就是指的列向量。在Eigen中定义了列向量:

  typedef Matrix<float,3,1> Vector3f ;

  Eigen也定义了行向量:

  typedef Matrix<int ,1,2 > RowVector2i ;

 

  如果矩阵的尺寸在编译的时候是不确定的,而在运行的时候才能确定,Eigen提供了定义动态大小的方法。比如非常好用的:

  typedef Matrix<double ,Dynamic,Dynamic > MatrixXd;  

  MatrixXd定义了任意行数和列数的矩阵,可以在运行时确定。

  类似地,对于向量有:

  typedef Matrix<int ,Dynamic ,1> VectorXi ;

  也可以对于一个维度确定,而指定另外一个维度是动态大小的。

  Matrix<float,3,Dynamic> 矩阵的行数是 3,列数不确定。

 

  矩阵的构造,Eigen提供了默认构造函数。

  Matrix3f a;

  MatirxXf b;

  a 是一个3  x 3的矩阵,每个元素都是未初始化的float。

  b 目前是一个 0 x 0 的矩阵。

 

  带参数的构造函数,对于矩阵,行数在列数前面,对于向量,只有向量的大小。

  MatrixXf a(10,15);

  VectorXf b(30);

  a 是一个 10 x 15的动态大小的矩阵,分配了内存但是没有初始化。

  b 是一个动态大小的向量,大小是30,分配了内存但是没有初始化。

  对于维度在 4 以下的矩阵和向量,都定义了固定大小的类型。

  例如可以使用,

  Vector2d ; Vector3d  ; Vector4d; 等来定义向量。

  Matrix2f ;Matrix3f ; Matrix4f ; 等定义矩阵。

 

  可以使用逗号初始化方式给矩阵和向量赋值。例如:

  Matrix3f m;

  m << 1,2,3,

     4,5,6,

                 7,8,9;

     这样就将上述值赋给了矩阵,在Eigen中矩阵默认的存储方式是行优先,就是先存储行。

 

  Eigen支持对动态大小的矩阵和向量重新指定大小。

  rows() , cols() , size() 分别返回行数,列数和 元素的个数。

  resize() 则可以重新指定矩阵大小。

  实例如下;

  

1 #include 
2 #include
3 4 using namespace Eigen; 5 6 7 int main(int argc ,char** argv) 8 { 9 MatrixXd m(2,5);10 m.resize(3,4);11 std::cout<<"The matrix m is of size "12 <
<<" x "<
<

 运行结果:

  

赋值和resize

对于动态大小的矩阵,使用操作符 = 的时候,左边的矩阵大小会根据右边的矩阵大小改变。

例如:

1 #include 
2 #include
3 4 using namespace Eigen; 5 6 7 int main(int argc ,char** argv) 8 { 9 Matrix2f a(2,2);10 std::cout<<"a is of size "<
<<"x"<
<

运行结果如下:

 

固定大小和动态大小

  对于小尺寸的矩阵,使用固定大小的方式,时间开销要小的多。

 

Eigen 定义了相当多的方便使用的类型,其中还包括复数类型。

 MatrixNt ,VectorNt ,RowVectorNt 。

N  : 2,3,4,X ;

t : i ,f d ,cf cd.

 

  

  

  

转载于:https://www.cnblogs.com/wangxiaoyong/p/8903505.html

你可能感兴趣的文章
Eclipse在Jar形成和应用程序包
查看>>
HDU 4907 Task schedule
查看>>
[leetcode]python 448. Find All Numbers Disappeared in an Array
查看>>
病毒表-相信对大家都有帮助-病毒词典
查看>>
Jmeter (二十八)多线程组间变量共享
查看>>
洛谷1781 宇宙总统 解题报告
查看>>
HDU 4630 No Pain No Game 树状数组+离线查询
查看>>
django上传文件
查看>>
CVPR2013-papers
查看>>
Javascript中定义方法的另类写法(批量定义Javascript对象的方法)
查看>>
ElasticSearch Document API
查看>>
JEECG使用笔记
查看>>
python多线程
查看>>
ASP.NET MVC系列:控制器的Edit方法
查看>>
JS中的自执行函数
查看>>
《Python从入门到实践》第五章动手试一试
查看>>
shell脚本基础
查看>>
检测杀软是否正常工作的代码
查看>>
SQL连接(内连接、外连接(左连接、外连接、完整外连接)、交叉连接(cross join))...
查看>>
关于ES6中的解构
查看>>