sparse

作者: 庵下桃花仙 | 来源:发表于2018-08-02 16:08 被阅读6次

    创建稀疏矩阵

    语法
    S = sparse(A)
    S = sparse(m,n)
    S = sparse(i,j,v)
    S = sparse(i,j,v,m,n)
    S = sparse(i,j,v,m,n,nz)
    说明

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

    例子

    创建一个 10,000×10,000 的满存储单位矩阵。

    A = eye(10000);
    whos A
    
      Name          Size                   Bytes  Class     Attributes
    
      A         10000x10000            800000000  double   
    

    此矩阵使用 800 MB 内存。

    将矩阵转换为稀疏存储。

    S = sparse(A);
    whos S
    
      Name          Size                Bytes  Class     Attributes
    
      S         10000x10000            240008  double    sparse    
    

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

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

    例子

    S = sparse(10000,5000)

    S = 
       All zero sparse: 10000x5000`
    
    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 其中一个参数可以使标量。

    例子

    使用重复的下标将值累加到单一稀疏矩阵中,如果不如此的话,可能要使用一个或多个循环。
    创建一个数据列向量和两个下标列向量。

    i = [6 6 6 5 10 10 9 9]';
    j = [1 1 1 2 3 3 10 10]';
    v = [100 202 173 305 410 550 323 121]';
    

    并排显示下标和值。

    [i,j,v]

    ans = 
    
         6     1   100
         6     1   202
         6     1   173
         5     2   305
        10     3   410
        10     3   550
         9    10   323
         9    10   121
    

    使用 sparse 函数将具有相同下标的值累加。

    S = sparse(i,j,v)

    S = 
       (6,1)      475
       (5,2)      305
      (10,3)      960
       (9,10)     444
    
    S = sparse(i, j, v, m, n)将 S 的大小指定为 m×n。

    例子

    指定大小的非零稀疏矩阵
    根据 i、j 和 v 三元数生成 1500×1500 的稀疏矩阵。

    i = [900 1000];
    j = [900 1000];
    v = [10 100];
    S = sparse(i,j,v,1500,1500)
    
    S = 
     (900,900)     10
    (1000,1000)   100
    

    当指定的大小大于 max(i)×max(j) 时,sparse 函数会使用额外的零值行和列填充输出。

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

    例子

    预分配稀疏矩阵中的存储空间
    创建一个由 10 个非零值构成的稀疏矩阵,但实际上为此矩阵分配可以存储 100 个非零值的空间。

    S = sparse(1:10,1:10,5,20,20,100);
    N = nnz(S)
    

    N = 10

    N_alloc = nzmax(S)
    

    N_alloc = 100
    spalloc 函数可以快速创建由全零元素构成的稀疏矩阵,同时还会在此矩阵中为非零数数值分配一定的存储空间。

    例子

    S = sparse(i,j,s,m,n,nzmax)——由i,j,s三个向量创建一个m*n的稀疏矩阵(上面的B矩阵形式),并且最多含有nzmax个元素。

    例如:B=sparse([1,2,3],[1,2,3],[0,1,2],4,4,4)

    B =
       (2,2)        1
    
       (3,3)        2
    

    其中i=[1,2,3],稀疏矩阵的行位置;j=[1,2,3],稀疏矩阵的列位置;s=[0,1,2],稀疏矩阵元素值。 其位置为一一对应。

    m=4(>=max(i)),n=4(>=max(j))(注:m和n的值可以在满足条件的范围内任意选取),用于限定稀疏的大小。

    nzmax=4(>=max(i or j)),稀疏矩阵最多可以有nzmax个元素。

    相关文章

      网友评论

        本文标题:sparse

        本文链接:https://www.haomeiwen.com/subject/oqejvftx.html