matlab 中的find用法

matlab 中的find用法,第1张

find返回的是满足条件的索引向量

满足条件的是几个,返回的就是几个数组成的向量

若只有一个满足条件,返回的当然是只有一个数的向量

例如:

>> a=[1,2,3]

a =

1 2 3

>> u=find(a>min(a))

u =

2 3

>>

find函数是找到某个元素的意思。

A=(find(Z(:,2)==i))其实可以认为是判断矩阵Z第2列元素是不是从1到8,A得到的是满足find函数的元素的索引,就是说第几个元素满足条件

A=[1 4 3 1 5];

a1=find(A~=2);%找出不等于2的位置

a2=find(A==2);%找出2的位置,结果为空,即不存在2

b=find(A==1);%找出1的位置

c=length(b);%不等于1的个数

其实,能看MATLAB的帮助文档,就能够知道大概的意思了

find - Find indices and values of nonzero elements

Syntax

ind = find(X)

ind = find(X, k)

ind = find(X, k, 'first')

ind = find(X, k, 'last')

[row,col] = find(X, )

[row,col,v] = find(X, )

翻译过来就是 --

ind = find(X) 查找矩阵X中的非零元,记录其下标位置于ind中,举个例子,如果

X = [1 2 0 3

3 0 0 4

0 1 0 3]

那么find(X)的结果ind = [1 2 4 6 10 11 12]', 这是按列来的,从第一列依次往后面数,等同于

Y = [1 3 0 2 0 1 0 0 0 3 4 3]; ind = find(Y);

那么为了更准确的得到行和列的指标,那么你可以输出两个结果,也就是

[row,col] = find(X), row代表行指标,col代表列指标,不甘心的话,还可以输出三个

[row,col,val] = find(X), 第三个val表示查找到对应位置非零元的值。

类似的,ind = find(X, k) 返回前k个非零元的指标

ind = find(X,k,'last') 返回后k个非零元的指标

+++++++++++++++++++++++++++++++++++++++++++++++++

一般情况下,find和逻辑矩阵用的很多,比方说,一个矩阵A中,想找到其中大于100数的位置和值,那么就可以用

[row,col] = find(A > 100);

那么A(row,col)就是那些大于100的数值了。

找到A中大于100,小于1000数的位置,可以输入

[row,col] = find(A>100 & A<1000);

rem(p,i)表示p除以i的余数

find()函数表示找到符合某一条件的结果的位置

该句意思是:找到p向量中,能够整除i,但又不等于i  的值的所在位置

比如,p=[3 4 5 6 7 8 9 10 11 12 13] ,i=2

运行该语句 n=find(rem(p,i)==0&p~=i)

得到

n =

     2     4     6     8    10

即 p向量中 第 2 4 6 8 10 个数符合条件(是2的整数倍又不等于2)

[r,c,v]=find(A),找到矩阵A中不为0的元素并返回

r找到的行,v找到的列,不为0元素的值

例如你用[r c v]=find([3 0;0 4]);

也就是矩阵|3 0|,从中找不为0的数,就会返回

|0 4|

r =

1

2

c =

1

2

v =

3

4

其中r c v的长度相等,一一对应表示

找到非零元素是 1行1列的3,而2行2列的4

然而通常多数用find来需找符合逻辑判断条件的元素的下标

其实,这个时候是分开两部来做的

首先逻辑判断条件实际上是一个表达式,可以返回一个逻辑矩阵

返回的矩阵中对应原来符合逻辑条件的元素的位置就会是1,不符合条件的就是0

你可以试一下 刚才的矩阵

X=[3 0;0 4];

X>2

ans =

1 0

0 1

返回的矩阵中符合条件大于2的位置是1,不符合的位置是0

然后我们再用find去寻找时r,c返回了不为0的元素的行列位置,而v返回的值就都是1了

由于通常我们用find函数多是find一个逻辑表达式,也就是不是0就是1的矩阵

所以的到的v都是1,平常我们就没有必要反会它了

但是实际上find是找所有非零元素的,如果有一天你需要得到矩阵中多有非零元素的值

的时候,别忘了可以利用这个返回的v

find这个函数是寻找某个矩阵,例如A,其中满足某个条件的元素的位置。你用find(max(R))时,先计算max(R),这时仅为一个数,无判别条件,当非零时显示1,为零时,是空你要用find找最小值在数组中的位置,应该是:

find(R==min(R))

相当正确,[r,c,v] = find(X)讲的是找出X中大于0的数,列出他们所在的行,列,值。顺序是先找第一列的从上到下,再找第二列的从上到下,依次类推。

如果是[r,c,v] = find(X>0)的话,v会变成都是1的向量,可以看做是对X>0的判断,值为1表示它是大于0的。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/12186016.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-21
下一篇2023-05-21

发表评论

登录后才能评论

评论列表(0条)

    保存