Eigen核心矩阵/向量类 (Matrix, Vector, Array)
1. Matrix
类(稠密矩阵)
模板参数
cpp
Matrix<Scalar, Rows, Cols, Options, MaxRows, MaxCols>
-
Scalar
: 元素类型(如float
,double
,int
)。 -
Rows
/Cols
: 行数和列数(Dynamic
表示动态大小)。 -
Options
: 存储顺序(RowMajor
或ColMajor
,默认ColMajor
)。 -
MaxRows
/MaxCols
: 动态矩阵的最大尺寸(可选)。
常用属性
属性 | 说明 | 示例 |
---|---|---|
RowsAtCompileTime | 编译时行数(Dynamic 为 -1) | Matrix3f::RowsAtCompileTime == 3 |
ColsAtCompileTime | 编译时列数 | MatrixXd::ColsAtCompileTime == Dynamic |
SizeAtCompileTime | 元素总数(行×列) | Vector4d::SizeAtCompileTime == 4 |
核心方法
方法 | 参数说明 | 返回值/功能 | 示例 |
---|---|---|---|
rows() , cols() , size() | 无 | 返回当前行数、列数、元素总数 | A.rows() |
operator()(i,j) | i : 行索引,j : 列索引 | 访问或修改元素 | A(1,2) = 5; |
setZero() | 无 | 将矩阵置零 | A.setZero(); |
setIdentity() | 无 | 设置为单位矩阵 | B.setIdentity(); |
transpose() | 无 | 返回转置矩阵(视图) | MatrixXd C = A.transpose(); |
sum() , mean() | 无 | 所有元素的和/平均值 | double s = A.sum(); |
col(j) , row(i) | j : 列索引,i : 行索引 | 返回列/行向量(视图) | Vector3d v = A.col(0); |
resize(rows, cols) | 动态矩阵调整大小 | 无(修改自身) | A.resize(5, 5); |
2. Vector
类(列向量)
说明
-
本质是
Matrix<Scalar, Size, 1>
的别名(列数为 1)。 -
常用别名:
-
Vector2f
,Vector3d
: 固定大小向量。 -
VectorXf
: 动态大小向量(X
表示动态)。
-
特有方法
方法 | 参数说明 | 功能 | 示例 |
---|---|---|---|
dot(v) | v : 同类型向量 | 点积 | double d = v1.dot(v2); |
cross(v) | v : 3D 向量 | 叉积(仅 3D 向量) | Vector3f v3 = v1.cross(v2); |
normalize() | 无 | 向量归一化(修改自身) | v.normalize(); |
norm() | 无 | 返回向量的 L2 范数 | double len = v.norm(); |
3. Array
类(逐元素操作)
说明
-
与
Matrix
类似,但用于逐元素运算(如+
,*
,sin()
)。 -
模板参数同
Matrix
,常用别名:-
Array33f
: 3x3 浮点数组。 -
ArrayXXd
: 动态大小数组。
-
特有方法
方法 | 参数说明 | 功能 | 示例 |
---|---|---|---|
cwiseProduct(arr) | arr : 同类型数组 | 逐元素乘法 | C = A.cwiseProduct(B); |
cwiseQuotient(arr) | arr : 同类型数组 | 逐元素除法 | D = A.cwiseQuotient(B); |
abs() , sqrt() | 无 | 逐元素绝对值/平方根 | B = A.abs(); |
exp() , log() | 无 | 逐元素指数/对数 | C = A.exp(); |
4. 初始化方式
方法 | 示例 | 说明 |
---|---|---|
逗号初始化 | Matrix3f A; A << 1,2,3, 4,5,6, 7,8,9; | 按行填充元素 |
构造函数 | Vector4d b(1.0, 2.0, 3.0, 4.0); | 直接初始化 |
特殊矩阵 | MatrixXd::Random(3,3); | 随机矩阵 |
Matrix3d::Identity(); | 单位矩阵 |
5. 代码示例
cpp
#include <Eigen/Dense>
using namespace Eigen;// 初始化矩阵和向量
Matrix3d A;
A << 1, 2, 3, 4, 5, 6, 7, 8, 9;
Vector3d b(1, 2, 3);// 矩阵运算
Matrix3d B = A.transpose();
double dot_product = b.dot(Vector3d::Ones());
ArrayXXd C = A.array().sqrt(); // 逐元素平方根// 解线性方程组
Vector3d x = A.colPivHouseholderQr().solve(b);
关键区别
特性 | Matrix | Array |
---|---|---|
用途 | 线性代数运算(矩阵乘法) | 逐元素运算(数学函数) |
运算符 * | 矩阵乘法 | 逐元素乘法 |
通过 array()
和 matrix()
方法可互相转换:
cpp
MatrixXd M = A.array() * B.array(); // 错误!需显式转换
MatrixXd M = (A.array() * B.array()).matrix(); // 正确