稀疏或密集矩阵存储

3

我正在处理一些不是特别稀疏的大型稀疏矩阵,并且一直在思考存储矩阵时需要多少稀疏度才能使其受益?我们知道,稠密矩阵的稀疏表示可能比原始矩阵更大。那么是否存在一个矩阵密度的阈值,以便将其存储为稀疏矩阵更好?我知道这个问题的答案通常取决于稀疏性的结构等因素,但我想知道是否有一些指导方针?例如,我有一个非常大的矩阵,密度约为42%。我应该将此矩阵存储为密集矩阵还是稀疏矩阵?


大概也取决于您想用矩阵做什么以及您是否关心节省内存或计算时间。您能在问题中澄清这一点吗? - David Zwicker
@David 感谢您的参与。我认为在这里讨论这个问题会更好,但是就我的情况而言,我的关注点更多地集中在内存方面,而不是计算时间,并且假设矩阵中的稀疏性没有结构性。但是我的意思是,我甚至怀疑一个42%密集矩阵的稀疏存储是否比其密集存储更小? - user3821329
嗯,这当然取决于您选择用什么格式存储矩阵。如果您想确保,最好的方法当然是在您特定的使用情况下进行测量! - David Zwicker
矩阵是否具有特定格式?比如说上三角形式。 - Salix alba
1个回答

2

scipy.coo_matrix格式将矩阵存储为3个np.arraysrowcol是整数索引,data与等效稠密矩阵具有相同的数据类型。 因此,根据总体形状和稀疏性(以及数据类型),计算所需的内存应该很简单。

csr_matrix可能更加紧凑。 dataindicescoo相同,但indptr每行都有一个值加1。 我认为indptr比其他人更短,但我刚构建了一个较小的矩阵,其中它更长。 例如,空行需要在indptr中有一个值,但在dataindices中没有值。这种格式的重点是计算效率。

csc类似,但处理列。 同样,您应该能够计算出其大小。

来自MATLAB的内存优势的简要讨论(使用类似的存储选项) http://www.mathworks.com/help/matlab/math/computational-advantages.html#brbrfxy

MATLAB设计师的背景论文 http://www.mathworks.com/help/pdf_doc/otherdocs/simax.pdf MATLAB中的稀疏矩阵:设计和实现


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接