列和行交换的最佳稀疏矩阵表示

时间:2012-04-25 13:15:10

标签: c++ data-structures matrix sparse-matrix

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

- Edit-- 为了澄清,我希望能够交换行,如交换行5和行7,以及交换列,如交换列6和列8.

2 个答案:

答案 0 :(得分:1)

您可能只想添加另一级别的间接来处理无效的交换。例如,如果您有一个稀疏表示可以有效地交换行而不是列,那么就有一个数组从真实列映射到有效列。访问元素时,使用该数组查找正确的底层元素。

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;
};

答案 1 :(得分:0)

我的建议是

特征:线性代数运算非常快速有效 http://eigen.tuxfamily.org/

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

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