当前位置:网站首页>matlab的find()函数的一些用法(快速查找符合条件的值)
matlab的find()函数的一些用法(快速查找符合条件的值)
2022-07-25 09:22:00 【霜溪】
有些时候,有一组数据,而任务呢,则是需要我们在这一组数据中找到符合某种规则的数据的位置,比如大于一个数,或者是等于一个数,或者是某个数的倍数等等。诸如此此类的问题有时也会令我们感到头痛。现在呢,咱们想一个办法,使得这个问题可以被很好地解决。
对于这类问题,一个最简单的,写一个循环遍历,找到符合条件的数据,确定其位置(索引值),然后保存这些位置数据。没错,这很简单,接下来也会把这个方法实现。
问题背景:一组数据依次为[1,2,3,4,0,1,0,10,12,16],当然,也可能更多,找到可以被2整除的数据,并记录其位置。
clc;clear;M=[1,2,3,4,0,1,0,10,12,16];n=length(M);List=[];j=0;for i=1:nif mod(M(i),2)==0 %判断是否可以被2整除j=j+1;List(j)=i;endenddisp(List)%输出符合条件的数据的位置RE=M(List);%得到符合条件的数据disp(RE)%输出符合条件的数据
结果:2 4 5 7 8 9 10 %符合条件的数据的位置2 4 0 0 10 12 16 %符合条件的数据
当然,这可以很好的把问题解决。但是,却有点复杂,有没有更为简单的办法?好吧,确实有。
形式一:find(判断条件)
M=[1,2,3,4,0,1,0,10,12,16];r1=find(M==0); %找到数据的0元素的位置disp(r1);r2=find(M~=0);%找到数据的非0元素的位置disp(r2);r3=find(M==1);%找到等于某个值(这里为1)的元素的位置disp(r3);r4=find(M>10);%找到大于某个值(这里为10)的所有元素的位置disp(r4);r5=find(mod(M,2)==0);%找到可以被2整除的所有元素的位置disp(r5);结果:5 71 2 3 4 6 8 9 101 69 102 4 5 7 8 9 10
当然,这个判断条件可以很多很多,具体依自己实际需要自行设置即可。
形式二(主要操作与0有关):
1 index=find(M)
找出数据M中的所有非零元素的位置(索引值),返回值为位置标号。M可为向量,也可为矩阵。
>> M=[1,2,3,4,6,0,0,9,0];>> find(M)ans =1 2 3 4 5 8%-------------------------------------->> M=[1,2;0,8];>> find(M)ans =134注:matlab矩阵的元素为按列存储
2 index=find(M,n)
返回前n个非零元素的位置,M可为向量,也可为矩阵。
>> M=[1,2,3,4,1,6,0,0,9,0];>> find(M,1)ans =1>> find(M,2)ans =1 2>> find(M,0)错误使用 find第二个参数必须为正标量整数。
3 index=find(M,1,'last')
返回最后一个非零元素的位置,M可为向量,也可为矩阵。
>> M=[1,2,3,4,1,6,0,0,9,0];>> find(M,1,'last')ans =9
注:matlab矩阵的元素为按列存储
形式三(主要针对矩阵)
通过形式二中的操作,对于矩阵,我们得到了位置,然而这个位置,计算机可以很好的识别,但对于我们却要进行一些计算。比如,一个2阶矩阵。从第一列第一个开始,按列存储,序号依次为1,2,3,4。其实如果用两个数来确定,那么对应关系就是像这样
1-----------(1,1)
2-----------(2,1)
3-----------(1,2)
4-----------(2,2)
[r,c]=find(判断条件)
r:行索引
c:列索引
例:
M=[1,2,3;4,0,8;0,0,9];[r,c]=find(M~=0);disp(r);disp(c);disp([r,c]);结果:1211231123331 12 11 21 32 33 3
显然,使用find()函数可以使得我们的编程变得非常简单,将会极大的减少我们的编程时间,从而留给我们更多的时间去思考更加复杂的问题。
边栏推荐
- Redis list structure command
- [code source] I have a big head for a problem every day
- 链表--基本操作
- Flutter rive multi state example
- Definition of cell
- OC -- Foundation -- Collection
- Swagger2 shows that there is a problem with the get interface, which can be solved with annotations
- 学习 Redis linux 安装Redis
- 最短路问题 Bellman-Ford(单源最短路径)(图解)
- Redis installation (Ubuntu)
猜你喜欢
随机推荐
OC--对象复制
In depth interpretation of C language random number function and how to realize random number
OC -- Foundation -- array
Redis string 结构命令
js中map()函数的使用
@4-1 CCF 2020-06-1 linear classifier
A picture explains SQL join left and right
初识Opencv4.X----均值滤波
About C and OC
OC--包装类和处理对象
关于学生管理系统(注册,登录,学生端)
Flutter rive multi state example
Redis list structure command
【数据挖掘】最近邻和贝叶斯分类器
类(2) 和 协议
Basic network knowledge
Laravel calls a third party to send mail (PHP)
链表--基本操作
Learning new technology language process
How to deploy the jar package to the server? Note: whether the startup command has nohup or not has a lot to do with it




![[code source] I have a big head for a problem every day](/img/02/cb083e247fe1f8374020db4b803758.png)




