用于列和行交换的最佳稀疏矩阵表示形式
Best sparse matrix representation for column and row swaping
我正在寻找允许有效交换行和列的稀疏矩阵表示。经典表示(通过压缩行,压缩列或三元组)似乎只允许执行一个或另一个,但从不显示。有人知道一个好的数据结构吗?
--编辑--澄清一下,我希望能够交换行,例如交换第 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
对于您的情况,这两个库都允许您有效地操作行和列
相关文章:
- 表示"accepting anything for this template argument" C++概念的通配符
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- 如何将ampl中的集合表示为c++中的向量
- 在c代码之间共享数据的最佳方式
- 使用std::source_location报告错误的最佳实践
- std::is_base_of表示ctor编译错误
- 输入中的字符串数未知(以字母表示)
- 派生类销毁的最佳实践是什么
- 在 C++ 中将整数数组转换为位集表示形式的最佳方法?
- 算法设计:用边界数字表示 2D 网格的最佳方式,以C++?
- 在C++中,将无符号整数转换为八进制表示,反之亦然的最佳方法是什么
- 在 C++11 中表示日内时间 HH:MM:SS 的最佳方法是什么?
- 在std::向量中表示原始字节的最佳方式
- 将二进制字符的字符串表示转换为字符串的最佳方法
- 用于列和行交换的最佳稀疏矩阵表示形式
- 确定 HWND 是否表示顶级窗口的最佳方法是什么?
- 在C++中表示可为null成员的最佳方式
- 表示模板化数字文字的最佳方式是什么