Matlab 寻找给定条件和指定索引集的索引

Matlab 寻找给定条件和指定索引集的索引,matlab,Matlab,给定一个向量x属于R^n,一个S=(1,…,n)的索引子集I,我想找到x中最大元素在`I'中的索引,或者完整向量中的索引 换句话说,如何在原始向量的索引空间中找到子向量的最大元素的索引 在MATLAB中实现这一点的最佳方法是什么 目前,我使用: xmax = max(x(I)); i = I(x(I) == xmax); i = i(1); 我正在寻找一种更有效的方法来实现这一点 例子: 所需的输出为3。您只需使用两个输出版本的max。第二个输出将为您提供找到最大元素的位置。但是,如果存在多个

给定一个向量
x
属于
R^n
,一个
S=(1,…,n)
的索引子集
I
,我想找到
x
中最大元素在`I'中的索引,或者完整向量中的索引

换句话说,如何在原始向量的索引空间中找到子向量的最大元素的索引

在MATLAB中实现这一点的最佳方法是什么

目前,我使用:

xmax = max(x(I));
i = I(x(I) == xmax);
i = i(1);
我正在寻找一种更有效的方法来实现这一点

例子:
所需的输出为3。

您只需使用两个输出版本的
max
。第二个输出将为您提供找到最大元素的位置。但是,如果存在多个找到最大值的条目,则只会找到第一次出现的。然后,您可以使用
max
的第二个输出索引到
I
,以获得所需内容。因此:

[~,loc] = max(x(I));
i = I(loc);

如果我理解正确,
x
是一个n维数组(矩阵)<代码>I具有线性索引。如果是,那么
xmax=max(x(I))应该足够了。使用
find
将获得索引(而不是元素本身)。如果不是这样的话,那么我不清楚您的注释。@ParagS.Chandakkar您好,很抱歉我在这个问题上犯了一个错误。我现在就纠正它。似乎
xmax=max(x(I))
将返回子向量中max元素的索引。例如,这将返回
2
@displayname-No。它将返回数组中的最大值,该数组用作
max
的输入。因此,实际返回的是4。如果需要最大值的索引,则需要使用两个输出版本的
max
,因此
[xmax,loc]=max(x(I))。不管怎样,我已经写了一个答案。@displayname-BTW,声明
S
是多余的。如果我们知道
I
将始终在1到
numel(x)
之间,则不需要声明
S
。事实上,你的例子中没有用到这个。@rayryeng我知道不需要
S
,只是想解释清楚。但似乎我还是把它弄糟了,因为我的英语不好。。。感谢您的回答。
然后您可以使用max的第二个输出索引到I中,以获得您想要的内容感谢您提供的有关信息。
[~,loc] = max(x(I));
i = I(loc);