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使用動態尺寸較好。

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