Eigen矩阵运算开源库使用完全指南(eigen矩阵乘法)

您所在的位置:网站首页 eigen基本操作 Eigen矩阵运算开源库使用完全指南(eigen矩阵乘法)

Eigen矩阵运算开源库使用完全指南(eigen矩阵乘法)

2023-03-06 13:55| 来源: 网络整理| 查看: 265

Eigen库是一个开源的矩阵运算库,其利用C++模板编程的思想,构造所有矩阵通过传递模板参数形式完成。由于模板类不支持库链接方式编译,而且模板类要求全部写在头文件中,从而导致导致Eigen库只能通过开源的方式供大家使用,并且只需要包含Eigen头文件就能直接使用。

Eigen库中矩阵为其基本数据类型,向量也是一种特殊的矩阵。其所有矩阵数据类型都是由一个模板类Matrix生成。

Matrix 类有6个模板参数,现在我们了解前三个足够。剩下的三个参数都有默认值.

Matrix 的三个强制的模板参数:

Matrix

 完整模板参数:

Matrix Scalar 就是矩阵元素标量类型。 RowsAtCompileTime 和ColsAtCompileTime 分别指代编译时候的行和列值。 

Eigen中提供了许多typedefs ,例如Matrix4f 是4*4的float型矩阵

typedef Matrix Matrix4f;

在Eigen中,vectors 只是一种特殊形式的矩阵,有一行或者一列。在大多数情况下一列比较多,这样的向量也叫做列向量,也简称向量。其他情况叫做行向量。

例如typedef Vector3f 是一个(列)向量,它的定义如下:

typedef Matrix Vector3f;

同样我们也提供了行向量的定义:

typedef Matrix RowVector2i;

https://blog.csdn.net/sn_gis/article/details/79015488

动态矩阵和静态矩阵:动态矩阵是指其大小在运行时确定,静态矩阵是指其大小在编译时确定。

MatrixXd:表示任意大小的元素类型为double的矩阵变量,其大小只有在运行时被赋值之后才能知道。

Matrix3d:表示元素类型为double大小为3*3的矩阵变量,其大小在编译时就知道。

在Eigen中行优先的矩阵会在其名字中包含有row,否则就是列优先。

Eigen中的向量只是一个特殊的矩阵,其维度为1而已。

矩阵类型:Eigen中的矩阵类型一般都是用类似MatrixXXX来表示,可以根据该名字来判断其数据类型,比如”d”表示double类型,”f”表示float类型,”i”表示整数,”c”表示复数;Matrix2f,表示的是一个2*2维的,其每个元素都是float类型。

 

项目中使用Eigen库

CMakeLists.txt中写法:

# CMakeLists.txt find_package(Eigen3 REQUIRED) include_directories(${EIGEN3_INCLUDE_DIR})

头文件包含写法:

数据类型定义在Eigen命名空间下:

// main.cpp #include

矩阵构造

1)默认构造:不会进行动态内存分配,也不会初始化矩阵元素

Matrix3f a; MatrixXf b;

a是一个3*3的矩阵,其中还有一个float[9]数组,其中的元素没有初始化;b是一个动态大小的矩阵,目前的大小是0*0,它的元素数组完全没有分配。 

2)指定行数列数构造:分配元素数组,不初始化元素

MatrixXf a(10,15); VectorXf b(30);

这里,a是10×15动态矩阵,数组内存已经分配,但是没有初始化;b是一个大小为30的向量,数组内存已经分配,但是元素没有初始化。 

3)向量简单初始构造

对于比较小的、固定长度的向量提供直接构造元素方式。

Vector2d a(5.0, 6.0); Vector3d b(5.0, 6.0, 7.0); Vector4d c(5.0, 6.0, 7.0, 8.0); RowVector4d c(5.0, 6.0, 7.0, 8.0);

4)逗号初始化

矩阵和向量都可以通过逗号分隔方法进行初始化。

Eigen::Matrix3f m; m


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3