当前位置: 首页 > news >正文

Eigen核心矩阵/向量类 (Matrix, Vector, Array)

1. Matrix 类(稠密矩阵)

模板参数

cpp

Matrix<Scalar, Rows, Cols, Options, MaxRows, MaxCols>
  • Scalar: 元素类型(如 floatdoubleint)。

  • 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)。

  • 常用别名:

    • Vector2fVector3d: 固定大小向量。

    • 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);

关键区别

特性MatrixArray
用途线性代数运算(矩阵乘法)逐元素运算(数学函数)
运算符 *矩阵乘法逐元素乘法

通过 array() 和 matrix() 方法可互相转换:

cpp

MatrixXd M = A.array() * B.array();  // 错误!需显式转换
MatrixXd M = (A.array() * B.array()).matrix();  // 正确

相关文章:

  • 全星研发项目管理APQP软件系统:助力企业迈向高效、透明的数字化项目管理新时代
  • 系统架构设计中的DSSA方法:理论、实践与行业深度应用
  • 【数论分块】数论分块算法模板及真题
  • 【Linux C/C++开发】使用hash算法进行性能优化
  • 基于pandoc的MarkDown格式与word相互转换小工具开发(pyqt5)
  • ChatGPT、deepseek、豆包、Kimi、通义千问、腾讯元宝、文心一言、智谱清言代码能力对比
  • WPF 调用 OpenCV 库
  • Make + OpenOCD 完成STM32构建+烧录
  • stm32进入睡眠模式的几个注意点
  • Debian12.8如何部署Ragflow
  • CS001-50-depth
  • 关于TCP三次握手和四次挥手的疑点
  • Ubuntu下安装vsode+qt搭建开发框架(二)
  • 罗技Flow跨电脑控制
  • 买币永续合约成全球交易热点,XBIT去中心化交易所平台显著提升市场流动性
  • 信奥赛CSP-J复赛集训(DP专题)(28):P2946 [USACO09MAR] Cow Frisbee Team S
  • io_uring概述:现代 Linux 异步 IO 的新范式
  • MySQL长事务的隐患:深入剖析与解决方案
  • 强化学习基础
  • 图像畸变-径向切向畸变实时图像RTSP推流
  • 上海出台灵活就业人员公积金新政:不限户籍、提取自由,6月起施行
  • 五一期间上海景观照明开启重大活动模式,外滩不展演光影秀
  • 国家发改委:建立实施育儿补贴制度
  • 关键词看中国经济“一季报”:稳,开局良好看信心
  • 精准滴灌“种企业”,苏南强县常熟新的进阶密码
  • 财政部:前3月国有企业利润总额10907.4亿元,同比增1.7%