概述
本篇为这个链接的学习总结。
Eigen库学习 ---- 1.矩阵类
- 一、矩阵的定义
- 二、向量的定义
- 三、动态矩阵的设置
- 四、构建矩阵和向量
- 五、赋值
- 六、修改矩阵尺寸
The Matrix class矩阵类:在Eigen库中,所有的矩阵和向量都是Matrix类,向量是一个只有1行或者1列的特殊矩阵。
一、矩阵的定义
Matrix类接收六个参数,但是前三个参数足够了。剩下的三个参数都有默认值,现在我们保持后面三个参数不变,只讨论前三个参数。
Matrix<元素类型 float, int Rows, int Cols>
即:
Matrix<元素类型 例如float型, int 行, int 列>
例如:
定义一个3x3的float型的矩阵a:
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中的矩阵,可以不在编译时候就指定矩阵大小(row
和col
),可以使用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
。
四、构建矩阵和向量
对于动态的矩阵向量,直接指定的数值是其初始尺寸。
Matrix3f a; //a是一个3x3的矩阵,元素为float型
MatrixXf b; //b是一个动态矩阵,大小为0x0,元素为float型。
MatrixXf c(10, 15); //c是一个10x15的动态矩阵。
VectorXf d(30); //d是一个长度为30的动态列向量,元素为float型。
对于固定的矩阵向量,直接指定的数值是其初始值。
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
五、赋值
矩阵向量的赋值,直接按照其下标索引赋值即可。
#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;
}
输出结果如下:
Here is the matrix m:
3 -1
2.5 1.5
Here is the vector v:
4
3
也可以用这种流式输入的方式赋值:
Matrix3f m;
m << 1,2,3,4,5,6,7,8,9;
cout << m;
cout << endl;
输出结果如下:
1 2 3
4 5 6
7 8 9
六、修改矩阵尺寸
矩阵的尺寸大小可以通过rows()
,cols()
和size()
来获取,分别返回行
、列
和元素数量
。
修改动态矩阵的大小要用resize()
方法。
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;
输出结果如下:
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
当给动态矩阵赋值一个动态矩阵时,原先的动态矩阵的尺寸也会发生改变。
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;
输出结果如下:
a is of size:
2x2
a is now of size:
3x3
下篇:Eigen库学习 ---- 2.矩阵向量的算数运算
最后
以上就是耍酷画板为你收集整理的Eigen库学习 ---- 1.矩阵类一、矩阵的定义二、向量的定义三、动态矩阵的设置四、构建矩阵和向量五、赋值六、修改矩阵尺寸的全部内容,希望文章能够帮你解决Eigen库学习 ---- 1.矩阵类一、矩阵的定义二、向量的定义三、动态矩阵的设置四、构建矩阵和向量五、赋值六、修改矩阵尺寸所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复