矩阵的存储方式
完全存储方式
稀疏存储方式:稀疏存储方式只存储矩阵的非零元素的值及其位置,即行号和列号
稀疏存储方式的产生
(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为原带状稀疏矩阵所有非零对角线的元素。