码迷,mamicode.com
首页 > 其他好文 > 详细

Eigen库的使用笔记

时间:2018-01-10 23:53:58      阅读:1106      评论:0      收藏:0      [点我收藏+]

标签:很多   构造   splay   alt   let   important   ali   des   cpp   

Eigen库的使用笔记

Matrix 与Array之间的差别与运算

Eigen里面主要有两种数据结构,分别为Matrix与Array,其中Matrix即为数学意义上的矩阵,可以非常方便地进行线性代数相关的运算,而Array即为通常意义上的数组,可以是一维,也可以是二维。

Eigen的初始化

Eigen中的Matrix与Array的初始化方式十分相似,同时它们的初始化方法也很多,这里仅用Array作例子。

直接赋值

	//直接赋值并初始化 
	Eigen::Array<int, 3, 1> arr_1(1, 2, 3);
	std::cout << arr_1 << std::endl;

输出为:

 

技术分享图片

输出结果

 

流方式赋值

	//先创建对象,再用流操作方法赋值
	Eigen::Array<int, 3, 3> arr_2;
	arr_2 <<
		1, 2, 3,
		4, 5, 6,
		7, 8, 9;
	std::cout << arr_2 << std::endl;

输出为:

 

技术分享图片

输出结果

 

指针方式赋值

	//用指针方法初始化
	std::vector<int> vec_int{ 1,2,3,4,5,6,7,8,9 };
	Eigen::Array<int, 3, 3> arr_3(vec_int.data());
	std::cout << arr_3 << std::endl;

输出结果:

 

技术分享图片

输出结果

 

这里需要特别注意,二维Array的元素的填充顺序是按列来填充的,即数据的填充方式是先填充完第一列,再去填充第二列,最后得到填充完所有元素。

不定尺寸的Matrix与Array的操作

有时在创建Eigen中的Matrix或者Array的数据结构时,可能会暂时未知其尺寸大小,即行与列的数目待定,此时就需要按如下方式来进行创建Matrix或Array对象。

//创建不定大小的Array
Eigen::Array<float, Eigen::Dynamic, Eigen::Dynamic> arr_dynamic;

//创建大小不定的Matrix
Eigen::Matrix<float, Eigen::Dynamic, Eigen::Dynamic> mat_dynamic;

创建Array时,哪一维的大小未知,就将那维设置为Eigen::Dynamic,哪一维的大小已知,就将该维的大小设为该值,Matrix在这方面也与Array同理。
在确切知道Array的大小并将要使用它时,需要先对Array进行resize操作,再使用Array(如赋值等等),即:

//对arr_dynamic进行resize操作,重新规定其尺寸大小
int row_cnt = 10, col_cnt = 100;
arr_dynamic.resize(row_cnt, col_cnt);
//对第(0,0)个元素进行赋值
arr_dynamic(0, 0) = 20;

多维数组的操作

Eigen中Array是一个模板类,它最多可以是二维,其模板为:

Array<typename Scalar, int RowsAtCompileTime, int ColsAtCompileTime>

其中Scalar为Array中的元素的数据类型,RowsAtCompileTime、ColsAtCompileTime分别为Array行与列的大小。
其中Scalar可以是int,double等常见的数据类型,也可以是Eigen::Array或者是Eigen::Matrix等类型,如果是使用Eigen::Array,则可以构造一个多维数组。示例如下:

//创建一个3x3x2的Array
Eigen::Array<Eigen::Array2d, 3, 3> arr_arr;
//为arr_arr中的第(0,0)个元素赋值
arr_arr(0, 0) = Eigen::Array2d::Ones();
//为arr_arr中的第(0,1)个元素赋值
arr_arr(0, 1) = Eigen::Array2d::Ones() * 2;
//输出结果
std::cout << "arr_arr(0,0) = " << std::endl << 
		arr_arr(0, 0) << std::endl;
std::cout << "arr_arr(0,1) = " << std::endl << 
		arr_arr(0, 1) << std::endl;

输出结果如下:

arr_arr(0,0) =
1
1
arr_arr(0,1) =
2
2

Eigen库的使用笔记

标签:很多   构造   splay   alt   let   important   ali   des   cpp   

原文地址:https://www.cnblogs.com/Jeiwen/p/8261549.html

(0)
(1)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!