何时使用find over逻辑索引

时间:2013-05-10 22:13:41

标签: matlab optimization indexing find

我需要返回一个大于另一个特定值的数组中的第一个值。我有:

find(A > val, 1, 'first')

根据这篇文章:https://stackoverflow.com/a/9464886/1985603在这种情况下发现是不可避免的。但是,怎么样:

B = A(A > val);
B(1)

除了额外的一行之外,是否有充分的理由在这里使用一个?

1 个答案:

答案 0 :(得分:6)

是的;速度!特别是对于大型阵列,find将明显更快。

考虑一下:两种情况下的操作A > val都相同,但是

B = A(A > val)

A中提取值,并将它们复制到新数组B中,必须对其进行分配和复制分配,并且必须销毁A(A> val)临时值。

所有find(A>val, 1, 'first')所做的就是遍历逻辑列表,并在遇到第一个true值时返回一个数字;这是一个很少无用的复制/分配/等等,因此,更快。

根据经验,当您不使用find中的其他选项时,逻辑索引几乎总是可取的。当您需要或使用find的其他功能时,find选项几乎总是更可取。