Main Content

spalloc

为稀疏矩阵分配空间

说明

示例

S = spalloc(m,n,nz) 创建一个大小为 m×n 的全零稀疏矩阵 S,该矩阵具有可存储 nz 个非零元素的空间,其中 nz >= 1

示例

全部折叠

使用 spalloc 初始化一个 10×10 全零稀疏矩阵,该矩阵最多可以容纳 20 个非零元素。

S = spalloc(10,10,20);

定义矩阵中的几个元素。

S(1:3,1:3) = magic(3)
S = 
   (1,1)        8
   (2,1)        3
   (3,1)        4
   (1,2)        1
   (2,2)        5
   (3,2)        9
   (1,3)        6
   (2,3)        7
   (3,3)        2

显示矩阵中非零元素的数量。

n1 = nnz(S)
n1 = 9

显示为非零矩阵元素分配的存储量。

n2 = nzmax(S)
n2 = 20

使用 spalloc 初始化一个 20×20 全零稀疏矩阵,其空间可容纳 100 个非零元素。

n = 20;
S = spalloc(n,n,5*n);

然后使用 for 循环填充 S 的列,一次填充一列,平均每列最多五个非零元素。

for j = 1:n
    S(:,j) = [zeros(n-5,1); round(rand(5,1))];
end

绘制矩阵 S 的稀疏模式。圆点表示非零元素。

spy(S)

Figure contains an axes object. The axes object contains an object of type line.

显示矩阵中非零元素的数量。

n1 = nnz(S)
n1 = 54

显示为非零矩阵元素分配的存储量。

n2 = nzmax(S)
n2 = 100

输入参数

全部折叠

矩阵行数,指定为非负整数。

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

矩阵列数,指定为非负整数。

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

非零元素的存储空间分配,指定为非负整数。如果为 nz 指定值 0,则 spalloc 会将 nz 更改为 1。

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

局限性

  • 矩阵维度 mn 在 32 位平台上都必须小于 2^31-1,在 64 位平台上都必须小于 2^48-1

提示

  • 当您多次向使用 spalloc 创建的矩阵赋值时,预分配的内存可防止重分配内存。然而,为稀疏矩阵分配存储空间仍是成本相对较高的操作,通常尽可能采用以下方法之一来避免该操作:

    • 一次性调用 sparse 函数

    • 一次性调用 spdiags 函数

    • 一次性串联一组矩阵,矩阵可以是稀疏矩阵、稠密矩阵或同时包含这两种矩阵

扩展功能

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

版本历史记录

在 R2006a 之前推出