Eigen库学习(一)稠密矩阵和数组操作——Matrix类

Matrix类

  • Matrix的前三个模板参数
  • 向量
  • Dynamic特殊值
  • 构造函数
  • 矩阵初始化
    • 逐个元素赋值
    • 使用逗号进行初始化
  • 矩阵大小调整

Matrix的前三个模板参数

Matrix类的前三个模板参数:

Matrix 

Eigen提前typedef了许多类型:

typedef Matrix Matrix4f;

向量

列向量(我们通常所指的向量就是指的列向量):

typedef Matrix Vector3f;

行向量:

typedef Matrix RowVector2i;

Dynamic特殊值

事先不知道矩阵的大小(Dynamic Size),可以使用Dynamic特殊值

typedef Matrix MatrixXd;

同样,事先不知道维度的列向量:

typedef Matrix VectorXi;

不知道列数的动态矩阵:

Matrix 

构造函数

实例化一个类:

Matrix3f a;
MatrixXf b;

两个矩阵均未初始化。

MatrixXf a(10,15);
VectorXf b(30);

动态矩阵a具有10*15的大小,其系数coefficient已分配allocated)但尚未初始化uninitialized)。向固定尺寸fixed-size)的矩阵传递尺寸大小也是合法的,例如下面:

Matrix3f a(3,3);

矩阵初始化

逐个元素赋值

#include 
#include 
使用名称空间Eigen ;
int main()
{
  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);
  std :: cout << “这是矩阵m:\n” << m << std :: endl;
  VectorXd v(2);
  v(0)= 4;
  v(1)= v(0) -  1;
  std :: cout << “这是向量v:\n” << v << std :: endl;
}

输出为:

这是矩阵m:
  3 -1 
2.5 1.5 
这是向量v:
4 
3

使用逗号进行初始化

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

输出为:

1 2 3 
4 5 6 
7 8 9

矩阵大小调整

可以通过rows(),cols()和size()检索矩阵的当前大小。这些方法分别返回行数,列数和系数数。调整动态大小矩阵的大小由resize()方法完成。

#include 
#include 
使用名称空间Eigen ;
int main()
{
  MatrixXd m(2,5);
  m.resize(4,3);
  std :: cout << “矩阵m的大小”
            << m.rows()<< “x” << m.cols()<< std :: endl;
  std :: cout << “它有” << m.size()<< “系数” << std :: endl;
  VectorXd v(2);
  v.resize(5);
  std :: cout << “向量v的大小为” << v.size()<< std :: endl;
  std :: cout << “作为矩阵,v的大小”
            << v.rows()<< “x” << v.cols()<< std :: endl;
}

输出为:

矩阵m的大小为4x3 
它有12个系数
向量v的大小为5 
作为矩阵,v的大小为5x1

赋值调整大小
赋值是使用将矩阵复制到另一个矩阵的操作operator=。Eigen自动调整左侧的矩阵大小,使其与右侧大小的矩阵大小相匹配。例如:

MatrixXf a(2,2);
std :: cout << “a的大小为” << a.rows()<< “x” << a.cols()<< std :: endl;
MatrixXf b(3,3);
a = b;
std :: cout << “a现在的大小为” << a.rows()<< “x” << a.cols()<< std :: endl;

输出为:

a的大小为2x2 
a,现在大小为3x3

当然,如果左侧是固定大小,则不允许调整大小。

你可能感兴趣的:(Eigen库学习(一)稠密矩阵和数组操作——Matrix类)