天天看点

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

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

将matlab中学到的代码知识心得汇总汇总,供自己以后复习学习用,温故而知新!首先开始量的积累,然后再去总结归纳!

(一) randperm 函数

random permutation,随机排列的意思。 randperm(n)

将1至n的序列打乱随机排列。如:

>>

randperm(5)

ans = 5 3 4 1 2

randperm(m,n)

将前m个数中选取n个数进行随机排列,易知

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

>>

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函数matlab_初学matlab中的小小心得

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

继续阅读