将matlab中学到的代码知识心得汇总汇总,供自己以后复习学习用,温故而知新!首先开始量的积累,然后再去总结归纳!
(一)randperm函数
random permutation,随机排列的意思。
randperm(n) 将1至n的序列打乱随机排列。如:
>>randperm(5)
ans = 5 3 4 1 2
randperm(m,n) 将前m个数中选取n个数进行随机排列,易知
>>randperm(8,5)
ans = 5 7 9 8 3
本人在学习中还发现randperm的其他用途:
1)如想要选取某一某一个向量A=[a1,a2,...,an]中的任一个数。则可以通过代码:
>>A( randperm(length(A),1) )
ans = A中随机选取任一个数,且所有数被选中的概率相等。
.......
(二)rand函数、randi函数、unifrnd函数
rand:random,随机的意思。
rand(m,n) 产生由在[0,1]之间均匀分布的随机数组成m行n列的矩阵。
>>rand(3,4)
ans = 0.8300 0.1048 0.2396 0.4398
0.5663 0.1196 0.8559 0.5817
0.9281 0.2574 0.3013 0.9355
rand(m) 等同于rand(m,m)。
randi:random integral ,随机整数的意思。
randi([a,b],m,n) 在指定区间[a,b]内随机取出大小为m*n的整数矩阵。
当m=n时,可以简写为randi([a,b],m)。
>>randi([1,5],4,5)
ans = 5 3 1 4 2
3 3 2 2 5
3 3 4 4 5
5 4 2 1 2
randi([m,n]) 在指定区间[m,n]内随机取出一个整数。
>>randi([1,5])
ans = 1
unifrnd: Continuous uniform random numbers.
unifrnd(a,b,m,n) 输出在区间[a,b]之间均匀分布的随机数组成的m*n的矩阵。
>> unifrnd(-2,2,3,2)
ans =
1.7360 0.9725
0.7149 -0.4311
1.0310 0.6219
...
(三)length函数、numel函数、size函数
length:Length of largest array dimension,即返回数组维度的最大值。
>>length(zeros(3,4))
ans = 4
如果是矩阵,可以得到矩阵维度的最大值,如果是向量,则可以得到向量中的元素数。
numel:Number of array elements,返回数组中的元素数量。
>> numel(zeros(3,4))
ans = 12
size:Array dimensions,返回数组的维度数。
size基本上非常常用,其比较常见的用法如下:
a = size(X):得到数组X各个维度长度,若X为矩阵,得到其行数和列数。
>> size(rand(2,3))
ans =
2 3
因此,若想分别获得矩阵的行与列,可以通过以下代码获得:
>> [m,n]=size(rand(2,3))
m = 2
n = 3
m = size(X,dim) :得到数组X的任一维度长度,dim=1,为行数、dim=2,为列数,以此类推。
(四)find函数
find:Find indices and values of nonzero elements,常用的搜索定位计数函数。
find的用法较多,比较常用的如下:
find(X) :寻找数组X中不为0的元素,并返回其索引数(其索引数是按照如图所示的顺序索引的)。
find(~X):寻找数组X中为0的元素,若不存在为0的元素则返回空矩阵。
>>a =
1 NaN
0 1
>> find(a)
ans =
1
3
4
find(condition):按照搜索条件搜索满足条件的所有元素的索引数。
>> find(a==1)
ans =
1
4
[i,j]=find(condition):返回满足条件的所有元素的行数与列数。
>>[i,j]=find(a==1)
i =
1
2
j =
1
2
可以看出,[i(k),j(k)]就是符合条件的元素坐标,但是matlab分别将行和列分别存在两个变量中了。
如果只想得到满足条件的部分元素呢?find可以按照正、反两个方面搜索满足条件的前N个元素。如:
>> x=randi(5,1,8)
x =
3 5 4 5 4 1 5 5
>> find(x<5,2)
ans =
1 3
>> find(x<5,2,'last')
ans =
5 6
可以看出,即使按照反方向搜索,其索引数仍然是正向的,只不过得到的是按照正向索引所得到的最后几个元素索引数。如果想反向搜索,想知道满足条件的元素是倒数第几个的话,可以通过以下代码实现:
>>>> numel(x)-find(x<5,2,'last')+1
ans =
4 3
假如想搜索满足条件的第3个元素呢?可以通过以下代码实现:
>>a = find(x<5,3);a=a(end)
a =
5
通过find函数不仅可以找到满足条件的索引数,还可以找到其元素值,如:
>> x(find(x<5,2))
ans =
3 4
(五)max函数、min函数
max与min函数用法一致。
max:Largest elements in array,寻找最大值。
max(a) :寻找数组a中的最大元素。
max(a,b):返回a和b中的最大值,分一下情况:
>> a=magic(3)
a =
8 1 6
3 5 7
4 9 2
>> max(a,2)
ans =
8 2 6
3 5 7
4 9 2
如果a为矩阵或向量,b为一个数,则max会将a中所有小于b的数替换成b。
而如果b是一个与a相同大小的矩阵或向量,则max会两两对比取大值后得到一个新矩阵。
同理min函数用法一致。
而如果想得到矩阵中每行或者每列的最大值呢?则可以用以下代码:
max(x,[],dim):其中dim=1为按列求最大值(这里dim = 1是列,与size相反);dim = 2为按行求最大值。之所以加‘[]’是为了和max(a,b)区分。
>> max(x,[],2)
ans =
8
7
9
>> max(x,[],1)
ans =
8 9 7
[i,j]=max(x,[],dim):i返回按照dim维度求得的最大值,j返回最大值的元素在每个维度中所处位置。