Matlab 使用逻辑索引而不是查找

Matlab 使用逻辑索引而不是查找,matlab,find,Matlab,Find,在我的代码中的一个循环中,我使用一条线性线来查找和绘制一些电势的最小值(为了清楚起见:7对应于包含电势值的单元格,5对应于x值): 现在Matlab建议使用逻辑索引而不是查找,尽管我只是简单地研究了一下,但我并没有想到我应该在这里做些什么。因此,这里的主要问题是我是否应该使用逻辑索引(我更喜欢保持一行),如果是这样的话:如何使用 我很抱歉提前问了这么一个小问题,但我正在努力增加我的Matlab知识,所以希望一个简短的回答可以帮助我了 丹尼斯的评论是正确的。其思想是,使用逻辑索引直接减少了一个步骤

在我的代码中的一个循环中,我使用一条线性线来查找和绘制一些电势的最小值(为了清楚起见:7对应于包含电势值的单元格,5对应于x值):

现在Matlab建议使用逻辑索引而不是查找,尽管我只是简单地研究了一下,但我并没有想到我应该在这里做些什么。因此,这里的主要问题是我是否应该使用逻辑索引(我更喜欢保持一行),如果是这样的话:如何使用


我很抱歉提前问了这么一个小问题,但我正在努力增加我的Matlab知识,所以希望一个简短的回答可以帮助我了

丹尼斯的评论是正确的。其思想是,使用逻辑索引直接减少了一个步骤。因此,如果您试图提取矩阵中大于2的所有元素,例如,使用“查找”,您将执行以下操作:

A = [1 3 2 1 4 1]
A(find(A>2))
这就像

A(find([0 1 0 0 1 0]))
然后

最后

[3, 4]
[3,4]
但是,如果直接像这样使用逻辑索引:

A(A>2)
你得到

A([0 0 1 0 0 1 0])
最后

[3, 4]
[3,4]
因此,您会得到完全相同的结果,并跳过对
find
的调用,您可以看到,在这些情况下,这是完全无关的

然后再添加一些非常酷的东西,除非你的Matlab非常旧,否则mlint(给你这个警告的部分)实际上可以帮你解决这个问题。如果将鼠标悬停在标有红色下划线的
查找
,您将看到:

这是这个错误的一个基本版本,请看结尾有一个小的
fix
按钮。这是您单击后得到的结果:


好的,在这个例子中,它是正常的索引,而不是逻辑的,但重点仍然是,mlint可以为您解决这个问题,这非常棒

我现在无法尝试,但是如果您只是删除单词
find
,会发生什么?如果这个(逻辑索引)仍然给出建议的结果,那么它确实比使用
find
更受欢迎。是的,谢谢,这确实有效!酷,是的,我知道“修复”按钮,但是很高兴知道这个功能叫做mlint。奇怪的细节:你在那里举的例子没有为我提供任何mlint(尽管它显然应该)。。。