Eigen 矩阵操作笔记
矩阵创建和初始化
动态大小矩阵
cpp
MatrixXd mat1(3, 3); // 3x3双精度矩阵
MatrixXf mat2(2, 4); // 2x4单精度矩阵
MatrixXi mat3(3, 3); // 3x3整数矩阵
固定大小矩阵
cpp
Matrix3d fixed_mat; // 3x3双精度矩阵
Matrix<double, 4, 2> mat4; // 4x2双精度矩阵
初始化方式
cpp
// 逗号初始化
MatrixXd mat(3, 3);
mat << 1, 2, 3,
4, 5, 6,
7, 8, 9;
特殊矩阵生成
cpp
MatrixXd zero_mat = MatrixXd::Zero(3, 3); // 零矩阵
MatrixXd ones_mat = MatrixXd::Ones(3, 3); // 全1矩阵
MatrixXd identity = MatrixXd::Identity(3, 3); // 单位矩阵
MatrixXd random_mat = MatrixXd::Random(3, 3); // 随机矩阵
基本运算操作
算术运算
cpp
MatrixXd sum = A + B; // 矩阵加法
MatrixXd diff = A - B; // 矩阵减法
MatrixXd product = A * B; // 矩阵乘法
MatrixXd scalar_mult = 2.0 * A; // 标量乘法
MatrixXd transpose = A.transpose(); // 转置
矩阵属性
cpp
int rows = A.rows(); // 行数
int cols = A.cols(); // 列数
int size = A.size(); // 总元素数
bool is_empty = (A.size() == 0); // 判断是否为空
元素访问和修改
单个元素操作
cpp
mat11(0, 0) = 1.0; // 设置元素(从0开始索引)
double value = mat11(1, 2); // 获取元素
行列操作
cpp
mat11.row(0) << 1, 2, 3; // 设置第一行
VectorXd first_col = mat11.col(0); // 获取第一列
输入输出操作
输出矩阵
cpp
cout << "Matrix A:\n" << mat22 << endl;
输入矩阵
cpp
// 从控制台输入矩阵元素
for(int i = 0; i < 2; i++) {
for(int j = 0; j < 2; j++) {
cin >> mat22(i, j);
}
}
关键要点总结
-
命名规则:
MatrixXd: 双精度动态矩阵MatrixXf: 单精度动态矩阵MatrixXi: 整数动态矩阵Matrix3d: 固定大小3x3双精度矩阵
-
初始化方法:
- 逗号初始化
- 特殊矩阵函数(Zero, Ones, Identity, Random)
-
运算特性:
- 支持标准矩阵运算
- 元素索引从0开始
- 提供行列级别的操作
-
内存管理:
- 动态矩阵在运行时确定大小
- 固定大小矩阵在编译时确定大小