Main Content

spfun

将函数应用于非零稀疏矩阵元素

说明

F = spfun(func,S) 将函数 func 应用于稀疏矩阵 S 的非零元素。输入参量 func 是一个函数的函数句柄,此函数接受一个输入参量。

此操作保留原始矩阵 S 的稀疏性,除非函数 funcS 的某些非零元素返回零。

示例

示例

全部折叠

创建一个 4×4 稀疏对角矩阵。

S = diag(sparse(1:4))
S = 4x4 sparse double matrix (4 nonzeros)
   (1,1)        1
   (2,2)        2
   (3,3)        3
   (4,4)        4

将指数函数应用于 S 的非零元素。生成的矩阵具有与 S 相同的稀疏模式。

F = spfun(@exp,S)
F = 4x4 sparse double matrix (4 nonzeros)
   (1,1)       2.7183
   (2,2)       7.3891
   (3,3)      20.0855
   (4,4)      54.5982

由于 spfun 仅应用于 S 的非零元素,因此只要 S(i) 为零,F(i) 的值就为零。这不同于将函数应用于 S 的所有元素。例如,将结果与将指数函数应用于 S 的所有元素进行比较。exp(S) 函数对 S0 元素返回 1

full(exp(S))
ans = 4×4

    2.7183    1.0000    1.0000    1.0000
    1.0000    7.3891    1.0000    1.0000
    1.0000    1.0000   20.0855    1.0000
    1.0000    1.0000    1.0000   54.5982

创建一个密度为 0.02 的随机 50×50 稀疏矩阵,其中矩阵具有 50 个非零元素。绘制矩阵 S 的稀疏模式。

rng default;
S = sprand(50,50,0.02);
spy(S)

Figure contains an axes object. The axes object with xlabel nz = 50 contains a line object which displays its values using only markers.

基于 S 的非零元素计算二次函数 x2+x+1。使用 spfun 计算的函数与矩阵 S 具有相同的稀疏模式。

fun = @(x) x.^2 + x + 1;
F = spfun(fun,S);
spy(F)

Figure contains an axes object. The axes object with xlabel nz = 50 contains a line object which displays its values using only markers.

输入参数

全部折叠

输入矩阵。此矩阵通常(但不一定)是稀疏矩阵。

如果 S 是满矩阵,则 F = spfun(func,S) 将函数 func 应用于 S 的非零元素,并将 F 以稀疏矩阵形式返回。

数据类型: double | logical
复数支持:

要对输入数组的元素应用的函数,指定为函数句柄。该函数应对 S 执行按元素运算。有关函数句柄的详细信息,请参阅创建函数句柄

示例: @(n) n+1

提示

  • 如果 func 对零值输入返回零值,则使用 func(S) 返回的结果与对稀疏矩阵 S 调用 spfun 的结果相同。

扩展功能

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

版本历史记录

在 R2006a 之前推出