Main Content

本页采用了机器翻译。点击此处可查看英文原文。

sparse

创建共分布稀疏矩阵

    说明

    示例

    S = sparse(A) 通过删除任何零元素将完全共分布矩阵转换为稀疏形式。您可以通过将包含许多零的矩阵转换为稀疏存储来节省内存。

    S = sparse(m,n) 创建一个由 mn 组成的全零共分布稀疏矩阵。

    S = sparse(i,j,v) 由三元组 ijv 创建一个共分布稀疏矩阵 SS 中的行数由 i 的最大值设置,S 中的列数由 j 的最大值设置。矩阵为 length(v) 非零元素分配了空间。

    每个输入 ijv 必须具有 1N 元素,以便每个非标量输入具有相同数量的元素。

    S = sparse(i,j,v,m,n)S 的大小指定为 m-by-n

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

    示例

    全部折叠

    创建一个 1000×1000 的共分布密集三角矩阵,按其第二维(列)分布。将共分布矩阵转换为共分布稀疏矩阵。

    spmd(4)
        C = triu(rand(1000,1000,"codistributed"));
        S = sparse(C);
    end

    有 4 个工作进程,每个工作进程包含一个 1000×250 的本地 C 块。

    输入参数

    全部折叠

    输入矩阵,指定为满矩阵或 codistributed 矩阵。如果 A 已经是稀疏的,那么 sparse(A) 将返回 A

    下标对,指定为标量、向量或矩阵的单独参量。如果 ij 不是标量,则 i(k)j(k)v(k)S(i(k),j(k)) 的值指定为:

    S(i(k),j(k)) = v(k)

    如果 ij 是标量,该函数将使用该值来指定 S 中的多个元素。例如,如果仅 i 是标量,则 j(k)v(k)S(i,j(k)) 的值指定为:

    S(i,j(k)) = v(k)

    如果 ij 对于 v 中的几个元素具有相同的值,则 sparse 会聚合 v 中具有重复索引的值。聚合行为取决于 v 中值的数据类型:

    • 对于逻辑值,sparse 应用 any 函数。

    • 对于双精度值,sparse 应用 sum 函数。

    值,指定为标量、向量或矩阵。v 的底层类型必须是 doublelogical

    如果 v 不是标量,i(k)j(k)v(k)S(i(k),j(k)) 的值指定为:

    S(i(k),j(k)) = v(k)

    如果 v 是标量,该函数将使用该值来指定 S 中的多个元素。例如,如果仅 v 是标量,则 i(k)j(k)S(i(k),j(k)) 的值指定为:

    S(i(k),j(k)) = v

    v 中任何为零的元素都会被忽略,ij 中相应的下标也会被忽略。

    sparse 在忽略 v 中的任何零元素之前设置输出矩阵的行数和列数。因此,如果将 v 中的任何值设置为 0,则输出矩阵的大小将不会改变。

    每个维度的大小,指定为单独的整数参量。mn 的底层类型必须是 doublem 是行大小,n 是列大小。如果指定 m,则必须指定 n

    如果没有指定 mn,那么 sparse 将使用默认值 m = max(i)n = max(j)。这些最大值是在删除 v 中的任何零之前计算的。

    非零元素的存储分配,指定为非负整数。mn 的底层类型必须是 double

    默认值为 max([numel(i), numel(j), numel(v), 1])nz 必须大于或等于该值。

    对于稀疏矩阵 Snnz 函数返回矩阵中非零元素的数量,nzmax 函数返回为非零矩阵元素分配的存储量。如果 nnz(S)nzmax(S) 返回不同的结果,那么分配的存储空间可能比实际需要的多。因此,仅当您想填充值时才设置 nz

    版本历史记录

    在 R2006b 中推出