我在尋找允許高效的行和列交換的稀疏矩陣表示。經典的表現形式(通過壓縮行,壓縮列或三元組)似乎只允許執行一個或另一個,但從不展臺。 任何人都知道一個好的數據結構呢?用於列和行交換的最佳稀疏矩陣表示
- 編輯 - 爲了澄清,我希望能夠換行,就像換行5和第7行,也交換柱像交換柱6和列8
我在尋找允許高效的行和列交換的稀疏矩陣表示。經典的表現形式(通過壓縮行,壓縮列或三元組)似乎只允許執行一個或另一個,但從不展臺。 任何人都知道一個好的數據結構呢?用於列和行交換的最佳稀疏矩陣表示
- 編輯 - 爲了澄清,我希望能夠換行,就像換行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
對於你的情況,這兩個庫允許你有效地操縱行和列
你是什麼意思的'經典表示'?我知道存儲稀疏矩陣的六種方法,每種方法都適用於某些操作,每種方法都不適合某些操作。 – 2012-04-25 13:20:31
「高效的行和列交換」是什麼意思?例如,您是否想要將第1行與第3列交換;或者你想轉置整個矩陣? – 2012-04-25 13:21:23
@HighPerformanceMark:我認爲它能夠有效地將第1行與第5行進行交換,並有效地將第4列與第9列進行交換,但不會混合行和列......猜猜這意味着問題確實很難得到:x – 2012-04-25 13:41:40