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