美文网首页
Eigen向量和矩阵的用法1(C++)

Eigen向量和矩阵的用法1(C++)

作者: 淡水鱼Ada | 来源:发表于2020-12-07 19:14 被阅读0次

转载至:Eigen学习笔记2-Matrix类 - 山里的小勇子 - 博客园 (cnblogs.com)

在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() 则可以重新指定矩阵大小。

实例如下;


image.png image.png image.png image.png

相关文章

网友评论

      本文标题:Eigen向量和矩阵的用法1(C++)

      本文链接:https://www.haomeiwen.com/subject/pjitgktx.html