find函数matlab_初学matlab中的小小心得

51f5137a4169d822033ad7facb75d795.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的元素,并返回其索引数(其索引数是按照如图所示的顺序索引的)。

b48d5db8c71991acbe7d047b36743d6b.png
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')+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返回最大值的元素在每个维度中所处位置。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值