Eigen 简明教程

Eigen中的hello world程序

#include <iostream>  //cpp控制台输入输出头文件
#include<Eigen/Dense>   //加载Eigen中的Dense头文件,该头文件定义了数据类型MatrixXd的所有方法

using namespace Eigen;
int main()
{
	MatrixXd m(2, 2);  //声明一个矩阵m,设定行列长度
	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 << std::endl;
	return 0;
}

程序说明:

运行结果如下:
在这里插入图片描述

Eigen矩阵的基本运算

#include <iostream>
#include<Eigen/Dense> 

int main()
{
	MatrixXd m = MatrixXd::Random(3, 3);  //建立一个3*3的随机矩阵,每个元素的随机数范围为-1~1
	cout << "m=" << endl << m << endl;  //打印创建的随机矩阵与后面经过线性映射的对比
	cout << "MatrixXd::Constant:" << endl << MatrixXd::Constant(3, 3, 1.2) << endl;  //打印Constant方法的结果
	m = (m + MatrixXd::Constant(3, 3, 1.2)) * 50; //MatrixXd::Constant(3, 3, 1.2)建立一个3*3的矩阵,所有的元素均为1.2
	cout << "m=" << endl << m << endl;
	VectorXd v(3);      //建立一个三维向量
	v << 1, 2, 3;
	cout << "m*v=" << endl << m * v << endl;
}

程序说明:

运行结果如下:
在这里插入图片描述

在Eigen中所有的矩阵和向量都是矩阵模板类的对象,向量可以看做是特殊的矩阵。矩阵类有6个模板参数,目前我们一般只会使用前3个。

Eigen矩阵的变形

#include <iostream>
#include<Eigen/Dense> 

int main()
{
	MatrixXd m= MatrixXd::Random(3, 4);  //使用随机化方法得到的指定行列数的矩阵
	cout << "m: " << endl << m << endl;
	m.resize(4, 3);  //将矩阵变形,但是新旧矩阵的尺寸相等
	cout << "m: " << endl << m << endl;
	m.resize(5, 5);   //将矩阵变形,但是新旧尺寸不相同
	cout << "m: " << end; << m << endl;
	cout << "The matrix m is of size"
		<< m.rows() << "x" << m.cols() << endl;
	cout << "It has" << m.size() << "cofficients" << endl;
	VectorXd v(2);

	v.resize(5);
	cout << "The vector v is of size " << v.size() << endl;
	cout << "As a matrix v is of size " << v.rows() << "x" << v.cols() << endl;
	cout << v << endl;
	return 0}

程序说明:

运行结果如下:
在这里插入图片描述可以发现当矩阵变形前后如果矩阵的容量相同,变形只是将原来的数据的顺序做了改变,但是如果新旧矩阵容量不同,旧矩阵会被销毁,再按照新尺寸重建新的矩阵,向量同理。

固定尺寸的矩阵与动态矩阵区别

一般来说对于小型矩阵使用固定尺寸矩阵,如果矩阵的尺寸小于16使用固定尺寸性能较好,如果矩阵尺寸大于32使用动态尺寸较好。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章