Eigen基础小结

连载:https://blog.csdn.net/xuezhisdc/article/details/54619853

一、Eigen基础

1、使用命名空间:using namespace Eigen;

2、Matrix<double, 3, Dynamic> B; // Fixed rows, dynamic cols.

          需要使用: B.resize(2,3); 确定具体的列数 ;

3、矩阵初始化方式:Matrix3f::Zero(); 和  x.setZero();的语法区别:

    float value = 3.0;
    Matrix3f x; // 创建一个3x3的单精度矩阵
    x = Matrix3f::Zero(); //全零矩阵
    x = Matrix3f::Ones(); //全一矩阵
    x = Matrix3f::Constant(value); //全value矩阵
    x = Matrix3f::Identity(); //单位矩阵
    x = Matrix3f::Random(); // 随机矩阵

    x.setZero();
    x.setOnes();
    x.setIdentity();
    x.setConstant(value);
    x.setRandom();

4、动态大小的矩阵:

    int rows = 3;
    int cols = 4;
    MatrixXf x;
    x = MatrixXf::Zero(rows, cols);

5、Constant型

    MatrixXf::Constant(2, 3, sqrt(2)) << endl; // 2x3的单精度矩阵
    RowVector3i v; //3维行向量
    v.setConstant(6);

6、用cast 转换类型

    Vector3d md(1,2,3);
    Vector3f mf = md.cast<float>();

7、一些reduction方法: minCoeff() , maxCoeff() , sum() , trace() , norm() :

    Matrix3f x;
    x << 5,3,1,2,7,8,9,4,6;
    cout << x.minCoeff() << endl;
    cout << x.colwise().minCoeff() << endl;
    cout << x.rowwise().minCoeff() << endl;

 

二、稀疏矩阵操作

操作和求解稀疏问题需要的模块

1、SparseCore 
    SparseMatrix 和 SparseVector 类,基本线性代数(包括三角求解器) 
2、SparseCholesky 
     稀疏LLT和LDLTCholesky分解,解决稀疏正定问题。
3、SparseLU 
     稀疏LU分解
4、SparseQR 
    稀疏QR分解
5、IterativeLinearSolvers
6、Sparse 
     包含上述所有的模块。

稀疏矩阵的格式

    SparseMatrix是Eigen的稀疏模块的最主要的稀疏矩阵。

    SparseMatrix包含了4个精简的数组

(1)Values: 存储非零元素
(2)InnerIndices: 存储非零元素的行/列索引.
(3)OuterStarts: 存储每一列/行第一个非零元素在上面两个数组中的索引。
(4)InnerNNZs: 存储每一列/行中非零元素的数量。Inner在列优先矩阵中表示一个列,在行优先矩阵中表示一个行。Outer表示另一个方向。

关于稀疏矩阵,最重要的一点是:稀疏矩阵的存储方式,是按列优先储存,还是按行优先存储。

三、稀疏矩阵的压缩存储

      稀疏矩阵:非0元素很少(≤ 5%)且分布无规律。

      对于稀疏矩阵来说,采用二维数组的存储方法既浪费大量的存储单元用来存放零元素,又要在运算中花费大量的时间来进行零元素的无效计算,显然不科学。所以必须考虑对稀疏矩阵进行压缩存储。

       对稀疏矩阵进行压缩存储的一种较好的方法是:只存储在矩阵中极少数的非零元素,为此必须对每一个非零元素,保存它的下标和值。可以采用一个三元组Trituple<row,column,value><row,column,value>来唯一地确定一个矩阵元素。因此,稀疏矩阵需要使用一个三元组数组(亦称为三元组表)来表示。

       可以仿照对称矩阵的压缩存储,可用一维数组B存储稀疏矩阵A(这要区分两种存储方式:行优先方式和列优先方式)

 


 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值