Eigen/Sparse稀疏矩阵SparseMatrix

文章详细介绍了Eigen库中用于存储稀疏矩阵的SparseMatrix类,包括其四种主要数组:Values、InnerIndices、OuterStarts和InnerNNZs的作用和理解。特别地,解释了压缩列存储(CCS)和压缩行存储(CRS)模式,并指出Eigen运算通常产生压缩的稀疏矩阵。此外,还列举了SparseMatrix的一些关键成员函数,如nonZeros()、outerSize()和innerSize()等。

关于Eigen的稀疏矩阵的介绍:原文链接

1.SparseMatrix的格式

SparseMatrix主要包含以下4个数组:

  1. Values: stores the coefficient values of the non-zeros.
  2. InnerIndices: stores the row (resp. column) indices of the non-zeros.
  3. OuterStarts: stores for each column (resp. row) the index of the first non-zero in the previous two arrays.
  4. InnerNNZs: stores the number of non-zeros of each column (resp. row). The word inner refers to an inner vector that is a column for a column-major matrix, or a row for a row-major matrix. The word outer refers to the other direction.
  • Values为稀疏矩阵中所有非0元素的值
  • InnerIndices为非0元素的行索引(列主序存储为行的索引,行主-序存储为列的索引)。
  • OuterStarts结合文档中给出的公式:
    InnerNNZs[j] == OuterStarts[j+1] - OuterStarts[j]
    自己将OuterStarts理解为每列第一个非0元素在Values的索引(行主序存储则为每行第一个非0元素在Values的索引),因此OuterStarts的后一个元素相减为即为前一列的非0元素的个数。OuterStarts数组元素的个数=列数+1,最后一个元素表明了最后一列的非0元素个数。
  • InnerNNZs为每一列非0元素的个数(行主序存储为每一行 )。

仍以文档中的矩阵为例:
↓ 0 1 2 3 4 0 0 3 0 0 0 1 22 0 0 0 17 2 7 5 0 1 0 3 0 0 0 0 0 4 0 0 14 0 8 \begin{array}{c|ccccc} \downarrow &0 &1 &2 &3 &4 \\ \hline 0 &0 &3 &0 &0 &0 \\ 1 &22 &0 &0 &0 &17 \\ 2 &7 &5 &0 &1 &0 \\ 3 &0 &0 &0 &0 &0 \\ 4 &0 &0 &14 &0 &8 \end{array} 0123400227001305

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值