2011-04-30 195 views
0

我試圖在C中開發一個程序來將稀疏矩陣文件轉換爲稠密矩陣。從我讀到的,最好的方法是使用鏈表,但我沒有經驗,並沒有找到一個很好的在線資源來解釋這個問題。我不是在尋找一個快速解決方案,而是尋找一個網站或文本來源來解釋流程是如何工作的,這樣我就可以將它應用到這個項目中。我所看到的資源,建議使用三個數組來處理矩陣(行,列和單個值)以及向量的兩個數組(一個用於行,另一個用於列)。謝謝!C中的稀疏矩陣轉換

+1

源文件中的數據格式是什麼。 – 2011-04-30 21:12:32

+0

輸入文件將不包含不必要的格式,並且將嚴格填充一系列必需的值。矩陣文件中的前兩個值將根據行和列指示維度,其餘值則是所需的數據。例如,如果我有一個10x10矩陣,前兩個值將是10和10,然後是另外100個要用作數據的元素。我必須將稀疏矩陣轉換成一個密集矩陣,所以我可以執行矩陣向量乘法,所以矩陣和向量都必須經過轉換。 – Strata 2011-04-30 21:24:57

+0

但是,我已經爲乘法設計了一個算法,以便完成方面。在最初的兩個值之後,文件的其餘部分將按順序列出值,但轉換後將存儲在一維數組中。如果不清楚,我很抱歉,因爲這個概念對我來說依然非常抽象。 – Strata 2011-04-30 21:25:23

回答

0

您指定的文件格式適用於密集矩陣。具有100個元素的10×10矩陣是密集的。稀疏矩陣的元素少於n * m個元素,所有「缺失」元素都假定爲0.這樣做的要點是,幾乎全爲零的矩陣(在很多應用程序中都會發生)將使用較少空間。但是,使用稀疏矩陣格式來存儲密集矩陣將使用比普通數組更多的空間。

一種常見的稀疏矩陣文件格式稱爲MatrixMarket,它看起來與您所描述的非常相似。第一行有三個值:行數,列數,非零元素數量(稱爲nnz)。然後你有三行中的實際元素的nnz行:(row #) (column #) (value) 如果你的稀疏矩陣是一個相似的格式,那麼你不需要在內存中的任何稀疏矩陣。只需掃描值並直接填入密集數組。

如果你確實想在內存中有一個稀疏矩陣,那麼有幾種選擇來存儲它。 Triplets是最簡單的,它只是MatrixMarket文件的內存版本。 3個數組或1個結構數組。 線性代數運算的最常見結構是壓縮稀疏列(CSC)或壓縮稀疏行(CSR)。我會讓你看看,但如果你想要一個C實現與你一起玩,應該看看蒂姆戴維斯'CSparse。這也是MatLAB存儲稀疏矩陣的方式,Tim是編寫MatLAB部分的人員之一。

0

這聽起來像一個鏈表可能不是你要找的,但this site提供了一個關於這個問題的非常全面的教程。它可能有助於揭示它是否適合您的問題......祝您好運!