![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5SN5cDZ1cjYjFmZ3QWYzMDMyIDOkljNxQTY3MTM1YWM18CX0JXZ252bj91Ztl2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
将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的元素,并返回其索引数(其索引数是按照如图所示的顺序索引的)。
matlab中元素索引顺序
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')+1ans =
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返回最大值的元素在每个维度中所处位置。