1

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

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

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

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

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

4

2 回答 2

2

使用逻辑索引切片向量/矩阵通常是要走的路:

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

听起来您已经有了索引,因此您可以简单地将其转换为如下逻辑索引:

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

max_m = max(x(include));
于 2013-05-20T05:07:40.870 回答
1

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

[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.

于 2013-05-20T05:19:16.650 回答