【问题标题】:Matlab, find index of minimum value with the condition that it must be negativeMatlab,在必须为负的条件下找到最小值的索引
【发布时间】:2013-03-07 15:34:26
【问题描述】:

在给定的数组中,我需要找到数组中最小值的索引,但前提是它是负数。

例如:[1, 2, 3, 4] 将不返回任何索引

而[1, 4, -7, -2] 将返回3

我在想find() 命令一定很简单,但我不知道如何在这种特定情况下使用它。

【问题讨论】:

  • 我在尝试您的问题时自己发现了它。 :D

标签: arrays matlab find min


【解决方案1】:

有时,将所有内容都放在一个复杂的向量表达式中并不是最优的。

在这种情况下,我希望避免调用 find 会更快。

function [i] = most_negative_index(x)
   [mn, i] = min(x);
   if mn >= 0
       i = [];
   end
end

【讨论】:

    【解决方案2】:

    假设输入矩阵是A,这应该可以解决问题:

    find(A==min(A) & A<0)
    

    例如:

    >> A = [1, 2, 3, 4];
    >> B = [1, 4, -7, -2];
    >> find(A==min(A) & A<0)
    
    ans =
    
       Empty matrix: 1-by-0
    
    >> find(B==min(B) & B<0)
    
    ans =
    
         3
    

    【讨论】:

    • 我最初发布了一个函数,然后想出了:find(cell2mat(arrayfun(@(x)eq(x,min(A(sign(A) == -1))),A,'UniformOutput',false)))。大声笑,有时你需要退后一步,在开始编码之前考虑一些事情......
    • @jucestain:是的。 :D 它有时会发生在我们最好的人身上。
    • 值得注意的是,这比 Ben Voigt 发布的解决方案慢了大约 3 倍,只是需要考虑一下。
    • @Dan 取决于 OP 在做什么。如果他的实现需要上面的功能一次或两次,那应该没问题。实现 Ben 的解决方案将需要单独的函数文件或附加到另一个函数文件末尾的函数,这无论如何都会限制该函数的范围。我也只是为 100k 向量添加了这个解决方案,它花了 0.001 秒。 IMO最好使用清晰简洁的解决方案(如上所述)并担心以后的优化,但最终取决于OP的问题。
    • @jucestain 我只是指出它值得考虑。但是您根本不需要单独的功能。它可能不是一行,但没有理由不能在代码中准确地进入该解决方案的位置。
    猜你喜欢
    • 2015-04-18
    • 2014-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-24
    • 1970-01-01
    • 2016-04-11
    • 2023-03-31
    相关资源
    最近更新 更多