稀疏矩阵的计算优点
内存的管理
使用稀疏矩阵存储包含众多零值元素的数据,可以节省大量内存并加快该数据的处理速度。sparse
是一种属性,可以将该属性分配给由 double
或 logical
元素组成的任何二维 MATLAB® 矩阵。
通过 sparse
属性,MATLAB 可以:
仅存储矩阵中的非零元素及其索引。
不必对零元素执行运算,从而减少计算时间。
对于满矩阵,MATLAB 将在内部存储每个矩阵元素。零值元素与任何其他矩阵元素需要的存储空间量相同。但是,对于稀疏矩阵,MATLAB 只会存储非零元素及其索引。对于零值元素百分比很高的大型矩阵,此方案可以极大地减少存储数据所需的内存量。
whos
命令提供有关矩阵存储的高级信息,包括大小和存储类。例如,以下的 whos
列表显示了有关同一矩阵的稀疏版本和完全版本的信息。
M_full = magic(1100); % Create 1100-by-1100 matrix. M_full(M_full > 50) = 0; % Set elements >50 to zero. M_sparse = sparse(M_full); % Create sparse matrix of same. whos
Name Size Bytes Class Attributes M_full 1100x1100 9680000 double M_sparse 1100x1100 9608 double sparse
请注意,稀疏矩阵中使用的字节数较少,因为零值元素未被存储。
计算效率
在计算效率方面,稀疏矩阵也具有显著的优点。与满矩阵的运算不同,稀疏矩阵的运算不会执行不必要的低级算术操作,例如加零(x+0
始终为 x
)。这样便可大大缩短处理大量稀疏数据的程序的执行时间。