何时使用find over逻辑索引

mla*_*lai 6 indexing optimization matlab find

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

find(A > val, 1, 'first')
Run Code Online (Sandbox Code Playgroud)

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

B = A(A > val);
B(1)
Run Code Online (Sandbox Code Playgroud)

有没有充分的理由在这里使用一个,除了额外的线?

Rod*_*uis 6

就在这里; 速度!特别是对于大型阵列,find速度会明显加快.

想一想:A > val两种情况下的操作都是一样的,但是

B = A(A > val)
Run Code Online (Sandbox Code Playgroud)

从中提取值A,并将它们复制到一个新数组中B,该数组必须被分配和复制分配,并且A(A> val)必须销毁临时数据.

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

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