我正在使用不是非常稀疏的大型稀疏矩阵,而且我总是想知道将稀疏的矩阵存储需要多少稀疏才有益?我们知道,相当密集的矩阵的稀疏表示可能比原始矩阵具有更大的尺寸。那么矩阵的密度是否存在阈值,以便将其存储为稀疏?我知道这个问题的答案通常取决于稀疏性的结构等,但我想知道是否只有一些指导方针?例如,我有一个非常大的矩阵,密度约为42%。我应该将此矩阵存储为密集还是稀疏?
答案 0 :(得分:2)
scipy.coo_matrix
格式将矩阵存储为3 np.arrays
。 row
和col
是整数索引,data
与等效密集矩阵具有相同的数据类型。所以应该直接计算它将作为整体形状和稀疏度(以及数据类型)的函数所需的内存。
csr_matrix
可能更紧凑。 data
和indices
与coo
相同,但indptr
每行的值加1.我认为indptr
会比indptr
更短其他人,但我只是构建了一个较长的小矩阵。例如,空行需要data
中的值,但indices
或csc
中没有值。这种格式的重点是计算效率。
{{1}}类似,但使用列。再次,您应该能够计算这个大小。
简要讨论MATLAB的内存优势(使用类似的存储选项) http://www.mathworks.com/help/matlab/math/computational-advantages.html#brbrfxy
MATLAB设计人员的背景文件 http://www.mathworks.com/help/pdf_doc/otherdocs/simax.pdf MATLAB中的稀疏矩阵:设计与实现