41.sparse函数

在许多问题中提到了含有大量零元素的矩阵,这样的矩阵称为稀疏矩阵。为了节省存储空间和计算时间,MATLAB考虑到矩阵的稀疏性,在对它进行运算时有特殊的命令。

一个稀疏矩阵中有许多元素等于零,这便于矩阵的计算和保存。如果MATLAB把一个矩阵当作稀疏矩阵,那么只需在m×3的矩阵中存储m个非零项,第1列是行下标,第2列是列下标,第3列是非零元素值,不必保存零元素。如果存储每个浮点数需要8字节,存储每个下标需要4字节,那么整个矩阵在内存中存储需要16×m字节。

在MATLAB中提供了多种创建稀疏矩阵的方法。

· 利用sparse函数从满矩阵转换得到稀疏矩阵。

· 利用一些特定函数创建包括单位稀疏矩阵在内的特殊稀疏矩阵。

sparse函数建立一般稀疏矩阵的语法格式为:

S=sparse(A):通过挤出任何零元素将满矩阵转换为稀疏格式。如果矩阵包含许多零,将矩阵转换为稀疏存储空间可以节省内存。

S=sparse(m,n):生成m×n全零稀疏矩阵。

S=sparse(i,j,v):根据i、j和v三元组生成稀疏矩阵S,以便S(i(k),j(k))=v(k)。max(i)×max(j)输出矩阵为length(v)非零元素分配了空间。sparse将v中下标重复(在i和j中)的元素加到一起。

如果输入i、j和v为向量或矩阵,则它们必须具有相同数量的元素。参数v、i或j的其中一个参数可以是标量。

S=sparse(i,j,v,m,n):将S的大小指定为m×n。

S=sparse(i,j,v,m,n,nz):为nz非零元素分配空间。可以使用此语法为构造后要填充的非零值分配额外空间。

【例1-43】使用稀疏存储空间节省内存。

此矩阵使用800MB内存。

采用稀疏形式时,同一矩阵只使用约0.25MB内存。在这种情况下,可以使用speye函数来避免满存储,该函数可以直接创建稀疏单位矩阵。

此外,sparse函数还可以将一个满矩阵转换成一个稀疏矩阵,例如: