3

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

4

1 回答 1

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带有红色下划线的那个上,您会得到:

在此处输入图像描述

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

在此处输入图像描述

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

于 2013-08-16T09:04:24.053 回答