当前位置: 首页 > 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();  // 正确
http://www.xdnf.cn/news/163801.html

相关文章:

  • 循环神经网络RNN---LSTM
  • 函数递归之青蛙跳台阶+汉诺塔
  • 网络原理 - 8
  • 某海关某署 【瑞数6】逆向分析
  • 矩阵系统私信功能开发技术实践,支持OEM
  • Eigen的主要类及其功能
  • ACPs:面向智能体互联网的智能体协作协议体系
  • 经典反转结构——案例分析
  • 《算法竞赛进阶指南》0x20章目录
  • 57常用控件_QLineEdit的属性
  • 使用css修饰网页元素
  • 聚合分销系统开发:短剧小说外卖网盘电商cpscpa系统
  • PCL点云处理之基于FPFH特征的SAC-IA全局配准算法 (二百四十六)
  • 基于javaweb的SpringBoot小说阅读系统设计与实现(源码+文档+部署讲解)
  • Unity网络编程入门:掌握Netcode for GameObjects实现多人游戏基础(Day 39)
  • dubbo 隐式传递
  • MATLAB 2022a 部分讲解
  • 类和对象(下)
  • 综述类论文读后报告——重庆大学《深度学习在人类活动识别中的应用综述》
  • 16. LangChain自主智能体(Autonomous Agent):模拟人类工作流的进阶设计
  • 4.26-count部分的渲染
  • 参考平面的宽度-信号与电源完整性分析
  • 云原生--核心组件-容器篇-3-Docker核心之-镜像
  • 考研系列-计算机组成原理第四章、指令系统
  • 012组合数学——算法备赛
  • [创业之路-390]:人力资源 - 社会性生命系统的解构与重构:人的角色嬗变与组织进化论
  • 前端职业发展:如何规划前端工程师的成长路径?
  • RAG技术解析:以Text2SQL为例看检索增强生成的全流程应用
  • 第1章 基础知识
  • brew 安装openjdk查看其版本