stock稀疏矩阵

l0oc07j2  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(410)

我有一个非常大的矩阵(比如10000x1000)存储在一个文件中。很明显,它需要很多无用的内存,因为它有很多零。
我在维基百科上找到了一种存储这种矩阵的方法:
https://en.wikipedia.org/wiki/sparse_matrix#compressed_sparse_row_(csr、\u crs\u或\u yale\u格式)
我能把三个数组连接到矩阵上。但现在我想做相反的事情:给定这三个数组,我想还原原始矩阵。我知道我应该把元素放在数组a的哪一列(在数组ja中给出),但我不知道应该把它们放在哪一行。
需要帮忙吗?
非常感谢。

ffvjumwh

ffvjumwh1#

要计算出将它们放在哪一行,需要使用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的最后一个元素在最下面一行,倒数第二个元素在最上面一行,前两个元素在第三行。顶行没有条目。
将ia“转换为ia”可能会使实现更简单,因为您可以按以下方式处理行:

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

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

相关问题