本文均为博主按个人理解,通过Matlab运行进行的简单经验总结,因此可能存在失误之处,欢迎各位指正!
上篇转载的文章matlab之稀疏矩阵(sparse matrix)中,我们解释了存储稀疏矩阵的两种方式full storage organization和sparse storage organization,本篇我们继续探讨Matlab中sparse()和full()函数的应用。
1 sparse(A)
A=[1 2 3;4 5 6;7 8 9]; %输入矩阵A
B=sparse(A); %矩阵A的sparse storage organization存储形式
C=full(B); %将B重新转换为full storage organization存储形式
输出结果发现C=A.
2 sparse(i,j,v)
以i,j的元素作为索引,以v的值作为相应值而构造出的稀疏矩阵。
i=[1,2;3,4];j=[2,3;4,1]; %输入矩阵i,j
v=[10,3;5,7]; %矩阵v所含元素的个数必须和i,j的相同
B=sparse(i,j,v);
C=full(B);
注意,只需要i,j,v包含的元素个数相同即可,如果变成i,j,v变成向量形式的话,影响的仅仅是读取i,j,v包含的元素的顺序(矩阵元素读取顺序为按列自上至下读取)。
i=[1,2;3,4];j=[2,3,4,1]; %把j换成向量形式
v=[10,3,5,7]; %把v换成向量形式
B=sparse(i,j,v);
C=full(B);
观察以上两个结果。
注意,当v中有几个数值的索引(即对应的i,j元素组合)相同时,则把这几个数值直接相加。且由于是按照稀疏矩阵形式存储,所以输出结果对于v中的零值不予显示,但仍然存在记忆。
i=[1,2,2,4];j=[2,2,2,1]; %把j换成向量形式
v=[10,3,5,0]; %v的最后元素为0
B=sparse(i,j,v);
[i;j;v] %拼接矩阵,以便与C对比观察
C=full(B);