【问题标题】:When to use find over logical indexing何时在逻辑索引上使用查找
【发布时间】:2013-05-05 16:26:00
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: matlab optimization indexing find


    【解决方案1】:

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

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

    B = A(A > val)
    

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

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

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

    【讨论】:

    • 谢谢!这正是我正在寻找的答案:-)
    猜你喜欢
    • 1970-01-01
    • 2020-08-14
    • 2018-01-06
    • 1970-01-01
    • 1970-01-01
    • 2014-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多