zoukankan      html  css  js  c++  java
  • MATLAB矩阵——2.5稀疏矩阵

      矩阵的存储方式

    完全存储方式

    稀疏存储方式:稀疏存储方式只存储矩阵的非零元素的值及其位置,即行号和列号

    稀疏存储方式的产生

    (1)完全存储方式与稀疏存储方式之间的转化

    A=sparse(S):将矩阵S转化为稀疏存储方式的矩阵A

    S=full(A):将矩阵A转化为完全存储方式的矩阵S

    >> A=sparse(eye(5))

    A =

      (1,1) 1
      (2,2) 1
      (3,3) 1
      (4,4) 1
      (5,5) 1

    >> B=full(A)

    B =

      1 0 0 0 0
      0 1 0 0 0
      0 0 1 0 0
      0 0 0 1 0
      0 0 0 0 1

    >> whos
        Name   Size      Bytes Class

        A      5x5      84 double array (sparse)
        B      5x5      200 double array

    Grand total is 30 elements using 284 bytes

    (2)直接建立稀疏存储矩阵

    sparse函数的其他调用格式

    • sparse(m,n):生成一个m x n的所有元素都是零的稀疏矩阵
    • sparse(u,v,S):其中u,v,S是三个等长的向量。S是要建立稀疏存储矩阵的非零元素,u(i),v(i)分别是S(i)的行下标和列下标

    >> A=sparse([1,2,2],[2,1,4],[9,8,7])

    A =

      (2,1)   8
      (1,2)   9
      (2,4)   7

    >> B=full(A)

    B =

      0 9 0 0
      8 0 0 7

    使用spconvert函数直接建立稀疏存储矩阵,其调用格式为B=spconvert(A)

    A是一个m x 3 或m x 4 的矩阵,其每行表示一个非零元素,m是非零元素的个数

    • A(i,1)表示第i个非零元素所在的行
    • A(i,2)表示第i个非零元素所在的列
    • A(i,3)表示第i个非零元素值的实部
    • A(i,4)表示第i个非零元素值的虚部

    若矩阵的全部元素都是实数,则无须第四列


    >> A=[2,2,1;2,1,-1;2,4,3]

    A =

      2    2    1
      2    1   -1
      2    4   3

    >> B=spconvert(A)

    B =

      (2,1)    -1
      (2,2)    1
      (2,4)    3

    (3)带状稀疏矩阵的稀疏存储

    带状稀疏矩阵是指所有非零元素集中在对角线上的矩阵

    [B,d]=spdiags(A):从带状稀疏矩阵A中提取全部非零对角线元素赋给矩阵B,将非零对角线的位置给向量d

    A=spdiags(B,d,m,n):产生带状稀疏矩阵的稀疏存储矩阵A,其中m,n为原带状稀疏矩阵的行数和列数,矩阵B的第i列即为原带状稀疏矩阵的第i条非零对角线,向量d为原带状稀疏矩阵所有非零对角线的元素。

  • 相关阅读:
    P5468 [NOI2019]回家路线
    P1919 【模板】A*B Problem升级版(FFT快速傅里叶)
    P4390 [BOI2007]Mokia 摩基亚
    P4234 最小差值生成树
    P5459 [BJOI2016]回转寿司
    P2173 [ZJOI2012]网络
    P2163 [SHOI2007]园丁的烦恼
    P3826 [NOI2017]蔬菜
    P3327 [SDOI2015]约数个数和
    P1829 [国家集训队]Crash的数字表格 / JZPTAB
  • 原文地址:https://www.cnblogs.com/Tea1024/p/9126210.html
Copyright © 2011-2022 走看看