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(); // 正确