是否有一种有效的方法将压缩行存储(CRS)格式的稀疏矩阵转换为坐标列表(COO)格式?
最佳答案
看看 Yousef Saad 的图书馆 SPARSKIT -- 他有子例程可以在压缩稀疏行和坐标格式之间来回转换,以及其他几种稀疏矩阵存储方案。
无论如何,要了解如何从压缩格式中获取坐标格式,最简单的方法是首先考虑如何提出压缩行格式。假设您在 COO 中有一个稀疏矩阵,例如,您已将所有内容按顺序排列
rows: 1 1 1 1 2 2 2 2 2 3 3 3 ...
cols: 1 3 5 9 2 3 7 9 11 1 2 3 ...
因此,第 1 行中的非零条目为 (1,1)、(1,3)、(1,5)、(1,9) 等。您在行数组中存储了大量冗余数据;你可以只拥有一个数组 ia
这样ia(i)
告诉你数组中的起始地址 cols
对于行i
。在上面的示例中,我们将有
ia : 1 5 10 ...
cols: 1 3 5 9 2 3 7 9 11 1 2 3 ...
要从 COO 转变为 CSR,我们只需利用以下事实
ia(i+1) = ia(i) + number of non-zero entries in row i
对于任何 i。知道了这一点,您就可以逆向工作以从 CSR 获取 COO 格式。
关于matrix - 稀疏矩阵存储格式 - 转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14013342/