Matlab条件最大值无需修改向量

时间:2013-05-20 05:00:56

标签: matlab

假设我有一个浮点数向量。称之为x

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

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

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

但是,我想知道在Matlab中是否有一种更常规的解决方法。

2 个答案:

答案 0 :(得分:2)

使用逻辑索引切片矢量/矩阵通常是要采用的方法:

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

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

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

max_m = max(x(include));

答案 1 :(得分:1)

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

相关问题