使用逻辑索引而不是FIND

时间:2013-08-16 08:26:14

标签: matlab find

在我的代码的循环中,我使用单行查找并绘制一些潜在的最小值(为清楚起见:7对应于包含潜在值的单元格,5对应于x值):

plot(PDdata{subject,5}{1,1}(find(PDdata{subject,7}==...
    min(PDdata{subject,7}))),min(PDdata{subject,7}),'ko')

现在Matlab建议使用逻辑索引而不是FIND,尽管我只是简单地研究了它,但这并不是我应该做的事情。因此,这里的主要问题是我是否应该使用逻辑索引(我更喜欢将其保留为单行!),如果是这样的话:怎么做?

我提前为提出这样一个小问题而道歉,但我正在努力提高我的Matlab知识,所以希望简短的回答会帮助我!

1 个答案:

答案 0 :(得分:5)

丹尼斯在评论中是正确的。这个想法是使用逻辑索引直接删除一个步骤。因此,如果你试图提取矩阵中大于2的所有元素,使用find你会这样做:

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

就像

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

然后

A([2, 5])

最后

[3, 4]

但是,如果你直接使用逻辑索引:

A(A>2)

你得到了

A([0 0 1 0 0 1 0])

最后

[3,4]

所以你得到了完全相同的结果,并且你跳过了对find的调用,你可以看到在这些情况下完全无关。

然后只是为了添加一些非常酷的东西,除非你的Matlab已经很老了,mlint(给你那个警告的位)实际上可以解决这个问题。如果您将鼠标悬停在红色下划线的find上,则可以获得以下结果:

enter image description here

所以这是错误的基本版本,最后看到有一个fix按钮。这是你点击后得到的:

enter image description here

好的,所以在这个例子中它是正常的索引而不是逻辑但是点仍然存在,mlint可以为你修复这个非常棒!