我正在处理一些不是特别稀疏的大型稀疏矩阵,并且一直在思考存储矩阵时需要多少稀疏度才能使其受益?我们知道,稠密矩阵的稀疏表示可能比原始矩阵更大。那么是否存在一个矩阵密度的阈值,以便将其存储为稀疏矩阵更好?我知道这个问题的答案通常取决于稀疏性的结构等因素,但我想知道是否有一些指导方针?例如,我有一个非常大的矩阵,密度约为42%。我应该将此矩阵存储为密集矩阵还是稀疏矩阵?
我正在处理一些不是特别稀疏的大型稀疏矩阵,并且一直在思考存储矩阵时需要多少稀疏度才能使其受益?我们知道,稠密矩阵的稀疏表示可能比原始矩阵更大。那么是否存在一个矩阵密度的阈值,以便将其存储为稀疏矩阵更好?我知道这个问题的答案通常取决于稀疏性的结构等因素,但我想知道是否有一些指导方针?例如,我有一个非常大的矩阵,密度约为42%。我应该将此矩阵存储为密集矩阵还是稀疏矩阵?
scipy.coo_matrix
格式将矩阵存储为3个np.arrays
。 row
和col
是整数索引,data
与等效稠密矩阵具有相同的数据类型。 因此,根据总体形状和稀疏性(以及数据类型),计算所需的内存应该很简单。
csr_matrix
可能更加紧凑。 data
和indices
与coo
相同,但indptr
每行都有一个值加1。 我认为indptr
比其他人更短,但我刚构建了一个较小的矩阵,其中它更长。 例如,空行需要在indptr
中有一个值,但在data
或indices
中没有值。这种格式的重点是计算效率。
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中的稀疏矩阵:设计和实现