rambo

matlab知识(一)

1、判断两个矩阵是否相等

all函数:检测矩阵中是否全为非零元素,如果是,则返回1,否则,返回0。
any函数:检测矩阵中是否有非零元素,如果有,则返回1,否则,返回0。

如果A是一个向量,如果所有的元素都是非零的,则返回1,如果有一个元素为零,则返回0。
如果A是一个矩阵,则返回一个行向量,用于检测每一列是否全为非零元素,如果某一列中有一个元素为零,则返回0,如果某一列中全为非零元素,则返回1,由此构成一个行向量。
B = all(A, 1)
返回一个行向量,可以认为all(A, 1)等价于all(A)
B = all(A, 2) 
返回一个列向量,用于检测每一行是否全为非零元素,如果某一行中有一个元素为零,则返回0,如果某一行中全为非零元素,则返回1,由此构成一个列向量。

2、Sparse函数

MATLAB中两个概念:full storage organization(对应于full matrix)和sparse storage organization(对应于sparse matrix)。

一般意义上的稀疏矩阵,就是看起来很松散的,也就是说,在这个矩阵中,绝大多数元素是零元素。例如:
0, 0, 0, 0;
0, 0, 1, 0;
0, 0, 0, 0;
0, 1, 0, 2;
计算机存储稀疏矩阵可以有两种思路:(这个在李沐的PPT中有讲过)
1.按照存储一个普通矩阵一样存储一个稀疏矩阵,比如上面这个稀疏矩阵中总共十六个元素(三个非零元素),把这些元素全部放入存储空间中。这种存储方式,在matlab就叫做full storage organization。
2.只存储非零元素,那么怎么存储呢?
(4,2) 1
(2,3) 1
(4,4) 2
在MATLAB中,这种存储方式就叫做sparse storage organization。虽然,这样要多存储一组坐标,但如果稀疏矩阵中非零元素非常少,以这种存储方式存储稀疏矩阵反而节省了内存空间。
第一种方式, 进行矩阵运算时(比如稀疏矩阵的乘法),算法简单易实现,程序运行的快。而第二种方式,虽然有时可以节省存储数据时占用的存储空间,但进行运算时需要专门的算法实现,因此运行起来也要更耗时。
sparse函数的功能就是把以第一种存储形式存储的稀疏矩阵转换成第二种形式存储。对应的函数为full,即把以第二种方式存储的稀疏矩阵转换成第一种方式存储。

3、full函数
函数功能:在MATLAB中,该函数用于把一个稀疏矩阵sparse matrix)转换成一个全矩阵(full matrix)(关于sparse matrix和full matrix请参阅sparse)。在matlab中, meshgrid函数的源代码调用了该函数。

语法格式:

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))不超过三分之一,以稀疏矩阵形式存储一个矩阵所占用的存储空间要远远少于以全矩阵形式存储。然而,针对稀疏矩阵的运算过程要(比针对全矩阵的运算)花费更长的时间。所以,在使用稀疏矩阵形式存储一个矩阵时,这个比值最好不超过三分之二。

4、imresize

[...] = imresize(..., method) resizes the indexed image. method can be (1) a text string that specifies a general interpolation method, (2) a text string that specifies an interpolation kernel, or (3) a two-element cell array that specifies an interpolation kernel.

'bicubic': 采用双三次插值算法,在R2013a版本里,默认为这种算法。