用于列和行交换的最佳稀疏矩阵表示形式

Best sparse matrix representation for column and row swaping

本文关键字:表示 最佳 交换 用于      更新时间:2023-10-16

我正在寻找允许有效交换行和列的稀疏矩阵表示。经典表示(通过压缩行,压缩列或三元组)似乎只允许执行一个或另一个,但从不显示。有人知道一个好的数据结构吗?

--编辑--澄清一下,我希望能够交换行,例如交换第 5 行和第 7 行,以及交换列(如交换列 6 和列 8)。

您可能只想添加另一个间接级别来处理交换,无论哪种方式效率不高。 例如,如果您有一个稀疏表示形式,可以有效地交换行而不是列,那么有一个从真列映射到有效列的数组。 访问元素时,请使用数组查找正确的基础元素。

class SparseMatrix {
  public:
    Element& operator()(Index row,Index col)
    {
      return matrix(row,col_map[col]);
    }
    void swapRows(Index row1,Index row2)
    {
      matrix.swapRows(row1,row2);
    }
    void swapCols(Index col1,Index col2)
    {
      swap(col_map[col1],col_map[col2]);
    }
  private:
    FastRowSwapSparseMatrix matrix;
    vector<Index> col_map;
};

我的建议是

特征:对于线性代数运算来说非常快速和高效http://eigen.tuxfamily.org/

提升中的映射矩阵 -->更灵活,但线性代数运算速度较慢http://www.boost.org/doc/libs/1_39_0/libs/numeric/ublas/doc/matrix_sparse.htm

对于您的情况,这两个库都允许您有效地操作行和列