假设我有一个浮点数向量。称之为x
。
通常如果我想要x
中的最大数字,我可以调用matlab函数max(x)
。
但是,假设我想要最大的数字,但不包括向量中的某些索引,这些索引在其他向量中指定。
最简单的方法(以及我在C中的方式)是循环向量并不断更新max,同时跳过第二个向量中的任何索引。 也就是说,对最大值进行线性搜索并跳过我不想要的索引。
但是,我想知道在Matlab中是否有一种更常规的解决方法。
答案 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
。