博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Eigen库的使用笔记
阅读量:5225 次
发布时间:2019-06-14

本文共 1939 字,大约阅读时间需要 6 分钟。

Eigen库的使用笔记

Matrix 与Array之间的差别与运算

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

Eigen的初始化

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

直接赋值

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

输出为:

 

输出结果
输出结果

 

流方式赋值

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

输出为:

 

输出结果
输出结果

 

指针方式赋值

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

输出结果:

 

enter description here
输出结果

 

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

不定尺寸的Matrix与Array的操作

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

//创建不定大小的ArrayEigen::Array
arr_dynamic;//创建大小不定的MatrixEigen::Matrix
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

其中Scalar为Array中的元素的数据类型,RowsAtCompileTime、ColsAtCompileTime分别为Array行与列的大小。

其中Scalar可以是int,double等常见的数据类型,也可以是Eigen::Array或者是Eigen::Matrix等类型,如果是使用Eigen::Array,则可以构造一个多维数组。示例如下:

//创建一个3x3x2的ArrayEigen::Array
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) =11arr_arr(0,1) =22

转载于:https://www.cnblogs.com/Jeiwen/p/8261549.html

你可能感兴趣的文章
[BSGS][哈希]luogu P3846 可爱的质数
查看>>
Python 第四十五章 MySQL 内容回顾
查看>>
iostat参数说明
查看>>
Python-Mac 安装 PyQt4
查看>>
实验2-2
查看>>
String,StringBuffer与StringBuilder的区别?? .
查看>>
MongoDB遇到的疑似数据丢失的问题。不要用InsertMany!
查看>>
session token两种登陆方式
查看>>
IntelliJ IDEA 12集成Tomcat 运行Web项目
查看>>
android smack MultiUserChat.getHostedRooms( NullPointerException)
查看>>
实用的VMware虚拟机使用技巧十一例
查看>>
监控工具之---Prometheus 安装详解(三)
查看>>
不错的MVC文章
查看>>
网络管理相关函数
查看>>
IOS Google语音识别更新啦!!!
查看>>
20190422 T-SQL 触发器
查看>>
[置顶] Linux终端中使用上一命令减少键盘输入
查看>>
poj1422_有向图最小路径覆盖数
查看>>
BootScrap
查看>>
[大牛翻译系列]Hadoop(16)MapReduce 性能调优:优化数据序列化
查看>>