Eigen矩阵存储次序以及转换

[复制链接]
发表于 2025-5-26 17:02:12 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
一、Eigen矩阵存储次序

         在矩阵运算和线性代数中,"行优先"(Row-major)和"列优先"(Column-major)是两种差别的存储方式,它们决定了多维数组(如矩阵)在内存中的结构次序。
1. 行优先(Row-major)



  • 定义:矩阵按行次序存储在内存中,即第一行的所有元素连续存储,接着是第二行,依此类推。

  • 内存结构示例:
         
    • 对于一个 2x3 矩阵:

         
    • 行优先存储次序为:a, b, c, d, e, f。
        

2. 列优先(Column-major)



  • 定义:矩阵按列次序存储在内存中,即第一列的所有元素连续存储,接着是第二列,依此类推。

  • 内存结构示例:
         
    • 同样的 2x3 矩阵:

         
    • 列优先存储次序为:a, d, b, e, c, f。
        


Eigen 中的存储次序



  • Eigen 默认使用列优先存储(与 MATLAB 一致),但可以通过模板参数显式指定行优先。

  • 示例代码:
    cpp
    1. #include <Eigen/Dense>
    2. using namespace Eigen;
    3. // 默认列优先(Column-major)
    4. Matrix<float, 3, 3> mat_col_major;
    5. // 显式指定行优先(Row-major)
    6. Matrix<float, 3, 3, RowMajor> mat_row_major;
    复制代码

E

回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表