股票稀疏矩阵
Stock sparse matrix
我有一个非常大的矩阵(例如 10000x10000)要存储在一个文件中。所以很明显它需要很多无用的内存,因为它有很多零。
我在维基百科上找到了一种存储这种矩阵的方法:
https://en.wikipedia.org/wiki/Sparse_matrix#Compressed_sparse_row_(CSR,_CRS_or_Yale_format)
我能够获得链接到矩阵的三个数组。但现在我想做相反的事情:给定这三个数组,我想恢复原来的矩阵。我知道我应该将元素放在数组 A 的哪一列(它在数组 JA 中给出),但我不知道我应该将它们放在哪一行。
有什么帮助吗?
非常感谢。
要计算出将它们放在哪一行,您需要使用 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]
对于下面列出的维基百科示例:
A = [5,8,3,6]
IA = [0,0,2,3,4]
JA = [0,1,2,1]
这意味着 A 的最后一个元素位于底行,倒数第二个元素位于该行的上一行,A 的前 2 个元素位于第三行。第一行没有条目。
将 IA' 反转为 IA'' 可能会使实施更直接,因为您可以改为向下处理行,并像这样解释它:
IA'' = [0,2,1,1]
A = [5,8,3,6]
在顶行,0 个条目。下一行有 2 个条目 [5,3]。接下来的 2 个分别有 1 个条目,分别是 [3] 和 [6]。
我有一个非常大的矩阵(例如 10000x10000)要存储在一个文件中。所以很明显它需要很多无用的内存,因为它有很多零。
我在维基百科上找到了一种存储这种矩阵的方法:
https://en.wikipedia.org/wiki/Sparse_matrix#Compressed_sparse_row_(CSR,_CRS_or_Yale_format)
我能够获得链接到矩阵的三个数组。但现在我想做相反的事情:给定这三个数组,我想恢复原来的矩阵。我知道我应该将元素放在数组 A 的哪一列(它在数组 JA 中给出),但我不知道我应该将它们放在哪一行。
有什么帮助吗?
非常感谢。
要计算出将它们放在哪一行,您需要使用 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]
对于下面列出的维基百科示例:
A = [5,8,3,6]
IA = [0,0,2,3,4]
JA = [0,1,2,1]
这意味着 A 的最后一个元素位于底行,倒数第二个元素位于该行的上一行,A 的前 2 个元素位于第三行。第一行没有条目。
将 IA' 反转为 IA'' 可能会使实施更直接,因为您可以改为向下处理行,并像这样解释它:
IA'' = [0,2,1,1]
A = [5,8,3,6]
在顶行,0 个条目。下一行有 2 个条目 [5,3]。接下来的 2 个分别有 1 个条目,分别是 [3] 和 [6]。