2010-07-23 65 views
1

我正在實施一個壓縮行格式的稀疏矩陣類。這意味着我有固定數量的行,每行包含多個元素(對於不同的行,這個數字可以不同,但​​在矩陣初始化後不會改變。std :: vector <std :: vector <type>>用於稀疏矩陣結構還是其他?

是否適合通過向量載體或將在某種程度上片段的記憶?

我對子級如何落實這一分配,所以我將有記憶一個大截?

感謝您分享您的智慧! 德克

回答

0

具有稀疏矩陣的一般規則是,您選擇一個最適合矩陣中非零位置的結構;所以也許你可以寫更多關於矩陣結構的信息,並且還會調用哪些(某種)算法。
關於內存 - 如果這個矩陣不是太大,最好把它分配成一個大塊並且做一些索引魔術;這可能會導致更好的緩存使用。 如果它很大,那麼應該使用分塊版本,因爲它會更好地適應內存。

0

我已經使用3 std::vector<int>(2列&列索引和一個值)實現了壓縮列格式。你爲什麼需要std::vector<std::vector<int>>

你確定你正在實施正確的格式嗎?壓縮列格式(以及矩陣向量乘法的代碼)的描述can be found here.

+0

剛剛意識到我不會將我的矩陣以壓縮行格式存儲在LoL中(http://en.wikipedia.org/wiki/Sparse_matrix#List_of_lists_.28LIL.29) – Dirk 2010-07-23 16:17:53

+0

您是否只打算進行矩陣向量乘法?如果是這樣,我會推薦壓縮列格式。乘法很容易實現! – Jacob 2010-07-23 17:43:49

+0

是的,主要是,thx,我想我會這樣做。乘法的並行化也應該很容易實現(因爲每行的偏移量都被存儲),我猜想 – Dirk 2010-07-23 17:59:38

0

您不會得到具有矢量向量的「一大塊」。每行將是一個連續的塊,但每行的數據可能位於堆的不同位置。

請記住,如果您打算處理巨大的矩陣,這可能是件好事。矩陣越大,你就越有可能獲得連續的塊來適應整個事情。

相關問題