0


MATLAB知识点:all、any和find函数

​讲解视频:可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​

MATLAB教程新手入门篇(数学建模清风主讲,适合零基础同学观看)_哔哩哔哩_bilibili


节选自第3章 3.4.4 逻辑运算

3.4.4.4 all、any和find函数

下面我们介绍三个非常重要的函数,它们的作用请看下表:

其中,all函数和any函数的用法类似,以all****函数为例,它的用法如下:

(1)如果A是一个向量,那么当所有元素均为非零值时,all(A)返回逻辑值1 (true),当存在一个或多个元素为零时,返回逻辑值0 (false)。

(2)如果A是一个矩阵,那么all(A,dim) 沿着dim维来判断元素是否全为非零值,dim等于1时沿着行方向来判断每一列是否全为非零值,并将结果返回为一个全为逻辑值的行向量;dim等于2时表示沿着列方向判断每一行是否全为非零值,并将结果返回为一个全为逻辑值的列向量。特别地,当dim等于1时,可以直接简写成all(A)。

(事实上,all函数和any函数的用法和我们之前讲解的sum函数非常像)

可以看出,all函数相当于对向量或者矩阵的元素进行‘逻辑与&’运算,只有全为非零值时才返回逻辑值1。而any函数则相当于对元素进行‘逻辑或|’运算,存在至少一个非零值时就会返回逻辑值1。

我们来看any函数的例子:

事实上,all函数和any函数很少直接运用在数值矩阵上,它常常配合逻辑矩阵来实现特定的功能。我们来看下面的练习题:

(1)请随机生成一个100行3列的矩阵,用来记录学生的考试成绩:矩阵每一行代表一名同学,每一列代表一门科目的成绩,矩阵中的每个元素都是区间[50,100]内的随机整数。

score = randi([50,100],100,3)

(2)三门科目的成绩都不低于85分的同学可以获得奖学金评选的资格,请指出哪些同学可以获得资格。要求返回一个包含100个元素的逻辑向量,元素为逻辑值1的位置对应的同学有评选资格。

all(score >= 85,2)

(3)请指出哪些同学挂科了,至少有一门科目没过60分就算挂科。要求返回一个包含100个元素的逻辑向量,元素为逻辑值1的位置对应的同学挂科了。

any(score < 60,2)

(4)这三门科目中是否存在科目没有人挂科(所有同学的这一门科目的成绩都高于60分)。要求返回一个包含3个元素的逻辑向量,元素为逻辑1的位置对应的科目表示没有人挂科。

all(score >= 60)

大家应该注意到了,上面问题的答案有一点冗余。例如第二问我们关心的是哪些同学可以获得评选资格,但是答案返回的结果是一个长度为100的逻辑向量,向量中也包含了没有获得评选资格的同学,他们用逻辑值0表示。那么有没有一种方法能够找到这个向量中所有非零元素呢?find函数可以帮助我们实现!下面是MATLAB官方文档对于find****函数的介绍:

默认情况下,find函数会返回所有非零元素的索引,如果只给find函数一个返回值,那么会返回所有非零元素的线性索引;如果给两个返回值,那么会返回非零元素对应的行和列下标;如果给三个返回值,那么还会返回非零元素构成的向量。另外,大家也可以指定返回前n个非零元素的索引,只需要给定第二个输入参数n,此时会返回前n个非零元素的索引,如果要返回后n个非零元素的索引,那么需要使用find(X,n,'last')。

回到上面练习题的第二个问题,我们可以使用下面的命令对代码进行改进,这样就可以返回获得资格的同学的索引:

  1. tmp = all(score >= 85,2);
  2. ind = find(tmp)

练习题(接着上题来):

(5)找出恰好挂了两门科目的同学的编号。

  1. tmp = sum(score < 60,2); % 每位同学挂科的数目
  2. find(tmp == 2)

(6)找到总分超过260分的同学的编号。

  1. total_score = sum(score,2); % 计算每位同学的总分
  2. find(total_score > 260)

本文转载自: https://blog.csdn.net/qq_32589267/article/details/136023982
版权归原作者 数学建模学习交流 所有, 如有侵权,请联系我们删除。

“MATLAB知识点:all、any和find函数”的评论:

还没有评论