股票稀疏矩阵

时间:2018-12-06 23:11:24

标签: java file matrix storage sparse-matrix

我有一个非常大的矩阵(例如10000x10000)存储在文件中。显然,由于它有很多零,因此会占用大量无用的内存。

我在维基百科中发现了一种存储这种矩阵的方法:

https://en.wikipedia.org/wiki/Sparse_matrix#Compressed_sparse_row_(CSR,_CRS_or_Yale_format)

我能够将三个数组链接到矩阵。但是现在我想相反:考虑到这三个数组,我想恢复原始矩阵。我知道我应该将元素放在数组A中的哪一列(好在数组JA中给出),但是我不知道我应该将它们放在哪一行。

请帮忙吗?

非常感谢。

1 个答案:

答案 0 :(得分:2)

要确定将它们放入哪一行,您需要使用IA和A。

后退并计算列表

IA' = {IA[m+1] - IA[m], IA[m] - IA[m-1], IA[m-1] - IA[m-2],..., IA[2]-IA[1], IA[1]-IA[0]}

列表IA'会告诉您要添加到矩阵底部一行的A的条目数。

您已经知道使用J将其添加到何处。

所以

IA' = [4-3, 3-2, 2-0, 0]
IA' = [1,1,2,0] 

对于下面列出的Wikipedia示例:

   A  = [5,8,3,6]
   IA = [0,0,2,3,4]
   JA = [0,1,2,1]

表示A的最后一个元素在最下面一行,倒数第二个在该行的最后一行,A的前两个元素在第三行。第一行没有条目。

将IA'转换为IA''可能会使实现更加直接,因为您可以代之以向下处理行并按以下方式解释它:

IA'' = [0,2,1,1]
A    = [5,8,3,6]

第一行的0个条目。下一行有2个条目[5,3]。接下来的2个分别具有1个条目,分别为[3]和[6]。