matlab稀疏矩阵存储
1. 稀疏矩阵稀疏矩阵的计算机存储
在计算机存储中,稀疏矩阵的特性使其在处理大量元素为零的情况时显得尤为高效。当Matlab将矩阵视为稀疏矩阵时,存储策略发生了改变。通常,矩阵的存储仅需关注非零元素,而非全矩阵。具体来说,这种存储方式采用一个m×3的矩阵,其中第1列存储行下标,第2列存储列下标,第3列则是非零元素的值。每个非零元素占用8个字节(相当于高斯节),而下标则需要4个字节。因此,对于一个包含m个非零元素的矩阵,总的内存占用为16字节乘以m。
以矩阵A为例,其元素为(1,0,0,0),形成一个1×1的单位矩阵,常规存储需要8兆字节(Mb)。然而,如果使用`sparse`命令,我们可以将其表示为一个1×3的矩阵,每行仅包含一个元素的行下标、列下标和值。这样,存储这个单位矩阵只需16千字节(Kb),相比于常规存储,节省的空间达到了99.8%。这种方法同样适用于许多具有大量零元素的广义矩阵,极大地节省了存储空间。
(1)matlab稀疏矩阵存储扩展阅读
如果在矩阵中,多数的元素为0,称此矩阵为稀疏矩阵(sparse matrix)。
2. 对稀疏矩阵进行压缩存储的目的是什么
对稀疏矩阵进行压缩存储目的是节省存储空间。
存储矩阵的一般方法是采用二维数组,其优点是可以随机地访问每一个元素,因而能够较容易地实现矩阵的各种运算。
但对于稀疏矩阵而言,若用二维数组来表示,会重复存储了很多个0了,浪费空间,而且要花费时间来进行零元素的无效计算。所以必须考虑对稀疏矩阵进行压缩存储。
(2)matlab稀疏矩阵存储扩展阅读
优点
稀疏矩阵的计算速度更快,因为MATLAB只对非零元素进行操作,这是稀疏矩阵的一个突出的优点。假设矩阵A,B中的矩阵一样,计算2*A需要一百万次的浮点运算,而计算2*B只需要2000次浮点运算。
因为MATLAB不能自动创建稀疏矩阵,所以要用特殊的命令来得到稀疏矩阵。算术和逻辑运算都适用于稀疏矩阵。对于一个用二维数组存储的稀疏矩阵Amn,如果假设存储每个数组元素需要L个字节,那么存储整个矩阵需要m*n*L个字节。
3. 谁给详细解释下 matlab里的稀疏带状矩阵创建命令 SM=spdiags(B,d,m,n)
产生稀疏存储矩阵
sparse可以讲完全存储方式转换为稀疏存储方式,那么,当使用稀疏矩阵时,要先产生完全存储方式的矩阵,然后再转换,这显然是不可取的,MATLAB有自己产生稀疏矩阵的函数spconvert:
B=spconvert(A);A为一个m*3或m*4的矩阵,A的每一列的意义分别为:
(i,1)第i非零元素所在行
(i,2)第i非零元素所在列
(i,3)第i非零元素的实部
(i,4)第i非零元素的虚部
3.带状(对角)稀疏矩阵
函数 spdiags
格式 [B,d] = spdiags(A) %从矩阵A中提取所有非零对角元素,这些元素保存在矩阵B中,向量d表示非零元素的对角线位置。
B = spdiags(A,d) %从空岩槐A中提取由d指定的对角线元素,并存放在B中。
A = spdiags(B,d,A) %用B中的列替换A中由d指定的对角线元素,输出稀疏枣禅矩阵。
A = spdiags(B,d,m,n) %产斗友生一个m×n稀疏矩阵A,其元素是B中的列元素放
在由d指定的对角线位置上。
例1
>>A = [11 0 13 0
0 22 0 24
0 0 33 0
41 0 0 44
0 52 0 0
0 0 63 0
0 0 0 74];
>>[B,d] = spdiags(A)
B =
41 11 0
52 22 0
63 33 13
74 44 24
d =
-3 %表示B的第1列元素在A中主对角线下方第3条对角线上
0 %表示B的第2列在A的主对角线上
2 %表示B的第3列在A的主对角线上方第2条对角线上
例1
>> B=[1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16];
>> d=[-2 0 1 3];
>> A=spdiags(B,d,4,4);
>> full(A)
ans =
2 7 0 16
0 6 11 0
1 0 10 15
0 5 0 14