Matlab学习笔记 sparse与full函数

来源:互联网 发布:斗鱼 炒股 知乎 编辑:程序博客网 时间:2024/06/06 03:29
(1)sparse函数
sparse函数的功能就是把以第一种存储形式存储的稀疏矩阵转换成第二种形式存储。对应的函数为full,即把以第二种方式存储的稀疏矩阵转换成第一种方式存储。
在MATLAB中,存储一个稀疏矩阵有两种方法。
语法格式:
1. S = sparse(A)
2. S = sparse(i,j,s,m,n,nzmax)
3. S = sparse(i,j,s,m,n)
4. S = sparse(i,j,s)
5. S = sparse(m,n)
程序示例:
1.>> 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
2.S = sparse(i,j,s,m,n,nzmax)
由向量i,j,s 生成一个m*n,且最多含有nzmax个元素的稀疏矩阵。
sparse([1,2,3,4],[1,2,3,4],[0,0,1,1],5,5,6)
ans =
(3,3) 1
(4,4) 1
其中i=[1,2,3,4],对应要形成矩阵的行位置;
J=[1,2,3,4],对应要形成矩阵的列位置;
S=[0,0,1,1],对应要形成矩阵对应位置的值。
i 和j 的位置为一一对应,即(1,1)(2,2)(3,3)(4,4),将s中的值赋给这四个坐标的位置。
若i=[2,1,3,4],j=[3,2,4,1],则形成的坐标为(2,3)(1,2)(3,4),(4,1) )
(m>=max(i),n>=max(j) , m和n的值可以在满足条件的范围内任意选取. nzmax>=max(i or j))
下面为一些简化的情况
3.S = sparse(i,j,s,m,n)
  
用 nzmax = length(s) ;
4.S = sparse(i,j,s)
使m = max(i) 和 n = max(j),在s中零元素被移除前计算最大值,[i j s]中其中一行可能为[m n 0];
5.S = sparse(m,n)
sparse([],[],[],m,n,0)的缩写,生成一个m*n的所有元素都是0的稀疏矩阵。

(2)full函数
full函数功能:在MATLAB中,该函数用于把一个稀疏矩阵(sparse matrix)转换成一个全矩阵(full matrix)(关于sparse matrix和full matrix请参阅sparse)。在matlab中, meshgrid函数的源代码调用了该函数。在MATLAB命令窗口中键入doc full或help full可以获得该函数的帮助信息。
语法格式:
A = full(S)
把稀疏矩阵S转换成全矩阵。如果S是一个全矩阵,S将原封不动地被返回。如果A是一个全阵,issparse(A)为0。假设x是一个m乘以n的矩阵,其中包含nz = nnz(x)个非零项。那么,如果以全矩阵方式存储x,即full(x),需要占用m*n个实数大小的内存空间;而sparse以稀疏矩阵形式存储,即sparse(x),需要内存空间来存储nz个实数和nz+n个整数。在大多数计算机上,一个实数占用的内存空间为一个整数的两倍。在这些电脑上,如果比值nnz/prod(size(x))不超过三分之一,以稀疏矩阵形式存储一个矩阵所占用的存储空间要远远少于以全矩阵形式存储。然而,针对稀疏矩阵的运算过程要(比针对全矩阵的运算)花费更长的时间。所以,在使用稀疏矩阵形式存储一个矩阵时,这个比值最好不超过三分之二。
程序示例:
A = [0, 0, 0; 0, 1, 0; 1, 0, 0];
S = sparse(A)
A = full(S)
输出结果:
>> S =
(3,1) 1
(2,2) 1
A =
0 0 0
0 1 0
1 0 0
由此可以看出,所谓稀疏矩阵存储形式,全矩阵存储形式,只是matlab中存储稀疏矩阵的两种不同的方式。前一种存储方式,只存储系数矩阵中的非零项的值和它在矩阵中的行列下标,而以全矩阵形式存储,则所有0也单独存储。

(3)以下为一例子:
>>A =
3
     3
     2
     1
     1
     2
     1
     2
     4
     1
>>B = full(sparse(A,1:size(A,1),1))
>>B =

     0     0     0     1     1     0     1     0     0     1
     0     0     1     0     0     1     0     1     0     0
     1     1     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0     1     0

参考:http://baike.baidu.com/view/7978188.htm?fr=aladdin
http://baike.baidu.com/view/1126632.htm?fr=aladdin
0 0
原创粉丝点击