【问题标题】:Matlab conditional maximum without modifying vectorMatlab条件最大值不修改向量
【发布时间】:2013-05-20 05:00:55
【问题描述】:

假设我有一个浮点数向量。叫它x

通常如果我想要x中的最大数字,我可以调用matlab函数max(x)

但是,假设我想要最大的数字,但不包括向量中的某些索引,这些索引在其他向量中指定。

执行此操作的最直接方法(以及我在 C 中执行的方法)是循环遍历向量并不断更新最大值,同时跳过我的第二个向量中的任何索引。 也就是说,对最大值进行线性搜索,并跳过我不想要的索引。

但是,我想知道在 Matlab 中是否有更传统的方法来解决这个问题。

【问题讨论】:

    标签: matlab


    【解决方案1】:

    使用逻辑索引对向量/矩阵进行切片通常是可行的方法:

    http://blogs.mathworks.com/steve/2008/01/28/logical-indexing/

    听起来你已经有了索引,所以你可以简单地将它变成这样的逻辑索引:

    exclude = [ ... ];
    include = ones(size(x));
    include(exclude) = 0;
    
    max_m = max(x(include));
    

    【讨论】:

    • 你应该使用逻辑,所以使用 true 而不是 "0" 使用 falsedouble 零将触发错误,double 将被解释为数组中第一个元素的索引。
    【解决方案2】:

    Paddy 的解决方案是好的,如果您只需要 max 值。 但是,如果你还需要最大值的索引,你就不能再做

    [max_m max_m_i] = max( x(include) ); 
    

    因为索引max_m_i 将相对于缩减数组x(include) 并且 索引到原始数组x

    要避免这种情况,您可以使用逻辑索引

    include = true( size(x) );
    include( exclude ) = false;
    [max_m max_m_i] = max( x .* include - inf .* ( ~include ) ); 
    

    这样,我们将排除的位置设置为-inf,这样它们就在那里(因此索引不会损坏),但它们不会被选为max

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-24
      • 1970-01-01
      • 1970-01-01
      • 2012-01-30
      • 2014-02-11
      • 1970-01-01
      • 2015-10-11
      相关资源
      最近更新 更多