Main Content

稀疏矩阵的计算优点

内存的管理

使用稀疏矩阵存储包含众多零值元素的数据,可以节省大量内存并加快该数据的处理速度。sparse 是一种属性,可以将该属性分配给由 doublelogical 元素组成的任何二维 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)。这样便可大大缩短处理大量稀疏数据的程序的执行时间。

相关主题