MATLAB中sparse函数使⽤及full函数⽤法简单介绍(转)
sparse函数
功能:Create sparse matrix-创建稀疏矩阵
⽤法1:S=sparse(X)——将矩阵X转化为稀疏矩阵的形式,即矩阵X中任何零元素去除,⾮零元素及其下标(索引)组成矩阵S。如果X本⾝是稀疏的,sparse(X)返回S。
例如:
A=
0    2    0
4    0    6
7    0    0
B=sparse(A)=
(2,1)        4
(3,1)        7
(1,2)        2
(2,3)        6
⽤法2:S = sparse(i,j,s,m,n,nzmax)——由i,j,s三个向量创建⼀个m*n的稀疏矩阵(上⾯的B矩阵形式),并且最多含有nzmax个元素。
例如:
B=sparse([1,2,3],[1,2,3],[0,1,2],4,4,4)
B =
(2,2)        1
(3,3)        2
其中i=[1,2,3],稀疏矩阵的⾏位置;j=[1,2,3],稀疏矩阵的列位置;s=[0,1,2],稀疏矩阵元素值。其位置为⼀⼀对应。
m=4(>=max(i)),n=4(>=max(j)) (注:m和n的值可以在满⾜条件的范围内任意选取),⽤于限定稀疏的⼤⼩。
nzmax=4(>=max(i or j)),稀疏矩阵最多可以有nzmax个元素。
⼀些简写的情况:
S = sparse(i,j,s,m,n)——nzmax = length(S) ;
S = sparse(i,j,s)——使m = max(i) 和 n = max(j),在S中零元素被移除前计算最⼤值,[i j s]中其中⼀⾏可能为[m n 0];
S = sparse(m,n)——sparse([],[],[],m,n,0)的缩写,⽣成⼀个m*n的所有元素都是0的稀疏矩阵。
full函数
功能:把稀疏矩阵转为全矩阵
A=full(X)——把稀疏矩阵X转换为全矩阵存储形式A。
matlab sparse matrix和full matrix
其实这只是matlab中存储稀疏矩阵的两种⽅法。
MATLAB函数sparse简介
函数功能:
这个函数与稀疏矩阵有关。
先说MATLAB中两个概念:full storage organization(对应于full matrix)和sparse storage organization(对应于sparse matrix)。
⽽要说明这两个概念,需要介绍稀疏矩阵的概念。
⼀般意义上的稀疏矩阵,就是看起来很松散的,也就是说,在这个矩阵中,绝⼤多数元素是零。例如:
sscanf函数用法详解 x0, 0, 0, 0;
0, 0, 1, 0;
0, 0, 0, 0;
0, 1, 0, 2;
计算机存储稀疏矩阵可以有两种思路:
1.按照存储⼀个普通矩阵⼀样存储⼀个稀疏矩阵,⽐如上⾯这个稀疏矩阵中总共⼗六个元素(三个⾮零元素),把这些元素全部放⼊存储空间中。这种存储⽅式,在matlab就叫做full storage organization。
2.只存储⾮零元素,那么怎么存储呢?
(4,2)        1
(2,3)        1
(4,4)        2
看出来了吧,只存储⾮零元素在稀疏矩阵中的位置和值。⽐如,上⾯所举的这个例⼦,值为2的项在第4⾏第4列,那么我们就只需要存储这⼀⾮零项在稀疏矩阵中的“坐标”(4,4)和这⼀⾮零项的值2。在MATLAB中,这种存储⽅式就叫做sparse storage organization。虽然,这样要多存储⼀组坐标,但如果稀疏矩阵中⾮零元素⾮常少,以这种存储⽅式存储稀疏矩阵反⽽节省了内存空间。
为什么matlab中会同时存在这两种存储⽅式呢?
第⼀种⽅式,更加直观,进⾏矩阵运算时(⽐如稀疏矩阵的乘法),算法简单易实现。
⽽第⼆种⽅式,虽然有时可以节省存储数据时占⽤的存储空间,但进⾏运算时需要专门的算法实现(使⽤C语⾔编写过稀疏矩阵乘法的同学应该能体会到)。
sparse函数的功能就是把以第⼀种存储形式存储的稀疏矩阵转换成第⼆种形式存储(其实这个函数更重要的功能是构建稀疏矩阵,这⾥不再讨论)。对应的函数为full,即把以第⼆种⽅式存储的稀疏矩阵转换成第⼀种⽅式存储。
在MATLAB中,存储⼀个稀疏矩阵有两种⽅法。
语法格式:
S = sparse(A)
S = sparse(i,j,s,m,n,nzmax)
S = sparse(i,j,s,m,n)
S = sparse(i,j,s)
S = sparse(m,n)
各种语法格式详见MATLAB帮助⽂档。
相关函数:full、issparse
程序⽰例
>> A = [0, 0, 0, 0;
0, 0, 1, 0;
0, 0, 0, 0;
0, 1, 0, 2];
>> sparse(A)
ans =
(4,2)        1
(2,3)        1
(4,4)        2
当然sparse函数还可以通过⼀定规则构造稀疏矩阵,这⾥就不多说了。
>>>>>###部分内容详细解释>>>>>>>
⽤法2:S = sparse(i,j,s,m,n,nzmax)——由i,j,s三个向量创建⼀个m*n的稀疏矩阵(上⾯的B矩阵形式),并且最多含有nzmax个元素
解释⼀下这个⽤法:
i 为横坐标下标向量,j 为纵坐标下标向量,s为矩阵中有效值的向量,由i,j,s创建⼀个稀疏矩阵⾮零值为s中⾮零值,矩阵⼤⼩为m*n,矩阵中元素个数不超过nzmax;

发表评论