Main Content

full

将稀疏矩阵转换为满存储

说明

A = full(S) 将稀疏矩阵 S 转换为满存储结构,这样 issparse(A) 返回逻辑值 0 (false)。

示例

示例

全部折叠

更改矩阵的存储格式,并比较存储要求。

创建一个随机稀疏矩阵。在 MATLAB® 中,稀疏矩阵的显示会忽略所有零,只显示非零元素的位置和值。

rng default %for reproducibility
S = sprand(8,8,0.3)
S = 8x8 sparse double matrix (15 nonzeros)
   (2,1)       0.0344
   (7,1)       0.4456
   (8,1)       0.7547
   (2,2)       0.4387
   (4,3)       0.7655
   (7,3)       0.6463
   (8,4)       0.2760
   (1,6)       0.9502
   (5,6)       0.1869
   (8,6)       0.6797
   (3,7)       0.3816
   (4,7)       0.7952
   (8,7)       0.6551
   (6,8)       0.4898
   (7,8)       0.7094

将矩阵转换为满存储。矩阵的 MATLAB 显示会反映新存储格式。

A = full(S)
A = 8×8

         0         0         0         0         0    0.9502         0         0
    0.0344    0.4387         0         0         0         0         0         0
         0         0         0         0         0         0    0.3816         0
         0         0    0.7655         0         0         0    0.7952         0
         0         0         0         0         0    0.1869         0         0
         0         0         0         0         0         0         0    0.4898
    0.4456         0    0.6463         0         0         0         0    0.7094
    0.7547         0         0    0.2760         0    0.6797    0.6551         0

比较两种格式的存储要求:

  • A 存储 64 个双精度值(每个值使用 8 个字节),占用 648=512 个字节。

  • S 存储 15 个非零元素以及 24 个说明其位置的整数,总共占用 398=312 个字节。

whos
  Name      Size            Bytes  Class     Attributes

  A         8x8               512  double              
  S         8x8               312  double    sparse    

输入参数

全部折叠

要转换的稀疏矩阵,指定为矩阵。如果 S 已经为满矩阵,则 A 等效于 S

提示

  • 如果 Xm×n 矩阵并且具有 nz 个非零元素,则 full(X) 需要用于存储 m*n 个元素的空间。另一方面,sparse(X) 需要用于存储 nz 个元素和 (nz+n+1) 个整数的空间。

    矩阵的密度 (nnz(X)/numel(X)) 决定是否将矩阵存储为稀疏矩阵比存储为满矩阵更有效。确切的交叉点取决于矩阵类以及平台。例如,在 32 位 MATLAB® 中,密度低于 2/3 的双精度稀疏矩阵需要的空间少于满存储的相同矩阵需要的空间。但是在 64 位 MATLAB 中,非零元素少于总元素一半的双精度矩阵比稀疏矩阵具有更高的存储效率。

扩展功能

C/C++ 代码生成
使用 MATLAB® Coder™ 生成 C 代码和 C++ 代码。

版本历史记录

在 R2006a 之前推出