2009-10-15 73 views
4

我需要做一個大矩陣就地換位(所以分配另一個矩陣和轉置它的最簡單的方法將無法工作)。不幸的是,這個大矩陣並不是方形的。更糟糕的是,矩陣存儲在一個雙列數組中,並且行數和行數分開存儲。C++矩陣變換。提升uBLAS和double *?

我發現,推動具有的uBLAS庫,但我沒有找到一個方法來總結我在的uBLAS矩陣雙打的陣列。有沒有辦法做到這一點?

或者你推薦另一種方式來完成這項工作?

回答

2

如果你有非常大的矩陣和你不想存儲臨時拷貝一個解決辦法是包裝你的矩陣陣列進級,並提供不同的適配器將通過在正常或調換方式的元素進行迭代。這不是非常高效的緩存,但可以節省大型矩陣的內存。

1

矩陣運算去,矩陣轉置是很容易得到正確的。我建議你自己做,而不是擔心uBLAS(至少對於這個問題)。有一些微妙之處,但wikipedia's article on in-place matrix transposition是驚人的徹底。

如果你有在數據表示稍微控制,你可以做得更好。如果你有一個帶有轉置T的矩陣M,那麼顯然M [x] [y] == T [y] [x],所以根據你需要的轉置矩陣,你可能不需要執行任何數據轉換所有。

1

根據你的使用情況特點而言,你說得對大,非正方形換位。在覈心與out-of-core似乎是任何人最關心的最大區別。