我是靠谱客的博主 耍酷画板,这篇文章主要介绍Eigen库学习 ---- 1.矩阵类一、矩阵的定义二、向量的定义三、动态矩阵的设置四、构建矩阵和向量五、赋值六、修改矩阵尺寸,现在分享给大家,希望可以做个参考。

本篇为这个链接的学习总结。

Eigen库学习 ---- 1.矩阵类

  • 一、矩阵的定义
  • 二、向量的定义
  • 三、动态矩阵的设置
  • 四、构建矩阵和向量
  • 五、赋值
  • 六、修改矩阵尺寸

  The Matrix class矩阵类:在Eigen库中,所有的矩阵和向量都是Matrix类,向量是一个只有1行或者1列的特殊矩阵。

一、矩阵的定义

  Matrix类接收六个参数,但是前三个参数足够了。剩下的三个参数都有默认值,现在我们保持后面三个参数不变,只讨论前三个参数。

  Matrix<元素类型 float, int Rows, int Cols>
即:
  Matrix<元素类型 例如float型, int , int >
例如:
  定义一个3x3的float型的矩阵a:

复制代码
1
2
Matrix<float,3,3> a;

二、向量的定义

  可以用typedefs来定义其他类型的矩阵,但是其本质还是Matrix类所定义的。
例如:
  typedef Matrix<float,3,1> Vector3f;
    定义的是向量,3行1列的float型;
  typedef Matrix< int,1,2> RowVector2i;
    定义的是向量,1行2列的int

三、动态矩阵的设置

  在Eigen中的矩阵,可以不在编译时候就指定矩阵大小(rowcol),可以使用Dynamic来动态指定矩阵大小。
例如:
  1.typedef Matrix< double,Dynamic,Dynamic> MatrixXd;
  MatrixXd可以用来定义一个大小未知的动态矩阵,元素类型为double型。

  2.typedef Matrix< int,Dynamic,1> VectorXi;
  VectorXi可以用来定义一个元素个数未知的动态向量,元素类型为int型。

  3.Matrix< float,3,Dynamic> a;
  定义一个行数为3,列数不定的动态矩阵a,元素为float型。

  4.
   Matrix3f a; a是一个3x3矩阵,元素为float型。
   MatrixXf b; b是一个动态的矩阵,大小是0x0

四、构建矩阵和向量

  对于动态的矩阵向量,直接指定的数值是其初始尺寸

复制代码
1
2
3
4
5
Matrix3f a; //a是一个3x3的矩阵,元素为float型 MatrixXf b; //b是一个动态矩阵,大小为0x0,元素为float型。 MatrixXf c(10, 15); //c是一个10x15的动态矩阵。 VectorXf d(30); //d是一个长度为30的动态列向量,元素为float型。

  对于固定的矩阵向量,直接指定的数值是其初始值。

复制代码
1
2
3
4
5
6
7
Vector2d e(5.0, 6.0); //e是一个长度为2的向量,元素类型为double,元素值为5.0,6.0 Vector3d f(5.0, 6.0, 7.0); //f是一个长度为3的向量,元素类型为double,元素值为5.0,6.0,7.0 Vector4d g(5.0, 6.0, 7.0, 8.0); //g是一个长度为4的向量,元素类型为double,元素值为5.0,6.0,7.0,8.0

五、赋值

  矩阵向量的赋值,直接按照其下标索引赋值即可。

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream> #include <Eigen/Dense> using namespace std; using namespace Eigen; int main() { MatrixXd m(2, 2);//2x2的矩阵,元素类型为double m(0, 0) = 3; m(1, 0) = 2.5; m(0, 1) = -1; m(1, 1) = m(1, 0) + m(0, 1); cout << "Here is the matrix m:n" << m << endl; VectorXd v(2);//动态矩阵,2个元素的列向量 v(0) = 4; v(1) = v(0) - 1; cout << "Here is the vector v:n" << v << endl; system("pause"); return 0; }

输出结果如下:

复制代码
1
2
3
4
5
6
7
Here is the matrix m: 3 -1 2.5 1.5 Here is the vector v: 4 3

也可以用这种流式输入的方式赋值:

复制代码
1
2
3
4
5
Matrix3f m; m << 1,2,3,4,5,6,7,8,9; cout << m; cout << endl;

输出结果如下:

复制代码
1
2
3
4
1 2 3 4 5 6 7 8 9

六、修改矩阵尺寸

  矩阵的尺寸大小可以通过rows()cols()size()来获取,分别返回和元素数量
  修改动态矩阵的大小要用resize()方法。

复制代码
1
2
3
4
5
6
7
8
9
MatrixXd m(2, 5);//2x5的矩阵 m.resize(4, 3);//4x3的矩阵 cout << "The matrix m is of size:n" << m.rows() << "x" << m.cols() << endl; cout << "It has " << m.size() << " cofficients" << endl; VectorXd v(2);//2个元素的列向量 v.resize(5);//5个元素的列向量 cout << "The vecotr v is of size:n" << v.size() << endl; cout << "As a matrix,v is of size:n" << v.rows() << "x" << v.cols() << endl;

输出结果如下:

复制代码
1
2
3
4
5
6
7
8
The matrix m is of size: 4x3 It's has 12 cofficients The vecotr v is of size: 5 As a matrix,v is of size: 5x1

  当给动态矩阵赋值一个动态矩阵时,原先的动态矩阵的尺寸也会发生改变。

复制代码
1
2
3
4
5
6
MatrixXf a(2, 2); cout << "a is of size:n" << a.rows() << "x" << a.cols() << endl; MatrixXf b(3, 3); a = b; cout << "a is now of size:n" << a.rows() << "x" << a.cols() << endl;

输出结果如下:

复制代码
1
2
3
4
5
a is of size: 2x2 a is now of size: 3x3

下篇:Eigen库学习 ---- 2.矩阵向量的算数运算

最后

以上就是耍酷画板最近收集整理的关于Eigen库学习 ---- 1.矩阵类一、矩阵的定义二、向量的定义三、动态矩阵的设置四、构建矩阵和向量五、赋值六、修改矩阵尺寸的全部内容,更多相关Eigen库学习内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(67)

评论列表共有 0 条评论

立即
投稿
返回
顶部