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为原带状稀疏矩阵所有非零对角线的元素。

猜你喜欢

转载自www.cnblogs.com/Tea1024/p/9126210.html