【问题标题】:Use logical indexing instead of FIND使用逻辑索引而不是 FIND
【发布时间】:2013-08-16 08:26:14
【问题描述】:

在我的代码中的一个循环中,我使用单线查找并绘制一些势的最小值(为清楚起见: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 知识,所以希望一个简短的回答已经可以帮助我!

【问题讨论】:

  • 我目前无法尝试,但如果您只是删除单词 find 会发生什么?如果这个(逻辑索引)仍然给出推荐的结果,那么它确实比使用find 更可取。
  • 是的,谢谢,确实有效!

标签: matlab find


【解决方案1】:

丹尼斯在评论中是正确的。这个想法是使用逻辑索引直接减少了一步。因此,如果您尝试提取矩阵中大于 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 上,您会看到:

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

好的,所以在这种情况下,它是正常的索引而不是逻辑,但重点仍然存在,mlint 可以为您解决这个问题,这非常棒!

【讨论】:

  • 酷,是的,我知道fix 按钮,但很高兴知道此功能称为 mlint。奇怪的细节:你放在那里的例子并没有为我产生任何 mlint(尽管它显然应该)......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-28
  • 2014-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-27
  • 1970-01-01
相关资源
最近更新 更多