您的位置:首页 > 编程语言 > MATLAB

matlab学习(1)——sparse函数和full函数处理稀疏矩阵

2013-04-14 18:34 344 查看

sparse函数和full函数

稀疏矩阵与非稀疏矩阵的转换

矩阵中非零元素的个数远远小于矩阵元素的总数),并且非零元素的分布没有规律,则称该矩阵为稀疏矩阵(sparse matrix)。

二维数组Amn中有N个非零元素,若N<<m*n(N/m*n<=0.2),则称A为稀疏矩阵。

函数功能:生成稀疏矩阵
使用方法 : S = sparse(A)

一般意义上的稀疏矩阵,就是看起来很松散的,也就是说,在这个矩阵中,绝大多数元素是零元素。例如:
0, 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。虽然,这样要多存储一组坐标,但如果稀疏矩阵中非零元素非常少,以这种存储方式存储稀疏矩阵反而节省了内存空间。

sparse函数的功能就是把以第一种存储形式存储的稀疏矩阵转换成第二种形式存储。对应的函数为full,即把以第二种方式存储的稀疏矩阵转换成第一种方式存储。
在MATLAB中,存储一个稀疏矩阵有两种方法。

S = sparse(A)
将矩阵A转化为稀少矩阵情势,即矩阵A中任何0元素被去除,非零元素及其下标构成矩阵S。
若是A本身是稀少的,sparse(S)返回S。
程序示例
>> 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

S = sparse(i,j,s,m,n,nzmax)
由向量i,j,s生成一个m*n的含有nzmax个非零元素的稀少矩阵S,并且有
S(i(k),j(k)) = s(k)。
向量 i,j 和 s 有雷同的长度。对应对向量i和j的值,s 中任何零元素将被忽视。
book.iLoveMatlab.cn
s 中在 i 和 j 处的反复值将被叠加。

重视:若是i或j随便率性一个大于最大整数值局限,2^31-1, 稀少矩阵不克不及被创建。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: