20

如何在不循环的情况下找到数组中最大元素的索引?

例如,如果我有:

a = [1 2 999 3];

我想定义一个函数indexMax,以便indexMax(a)返回3.

同样用于定义indexMin.

4

3 回答 3

24

max当指定两个输出参数时,内置函数具有此功能:

a = [1 2 999 3];
[the_max, index_of_max] = max(a)

the_max =

   999


index_of_max =

     3

同样对于min.

于 2013-01-28T06:41:09.550 回答
22

正如Evgeni max所指出的,min可以返回argmaxandargmin作为第二个参数。
值得注意的是,您可以在特定维度上使用这些函数:

 A = rand(4); % 4x4 matrix
 [ row_max row_argmax ] = max( A, [], 2 ); % max for each row - 2nd dimension
 [ col_min col_argmin ] = min( A, [], 1 ); % min for each column - 1st dimension

请注意空的[]第二个参数 - 它根本max( A, [], 2 )等同max( A, 2 )(我将把它留给你作为一个小练习,看看有什么max( A, 2 )作用)。

从这些“沿维度”调用返回的 argmax/argmin 是行/列索引。

于 2013-01-28T06:49:27.690 回答
7

作为替代解决方案,您可以尝试以下方法:

a = rand(1,1000);
min_idx = find(a == min(a));

显然,相同的程序适用于 的情况max

我希望这有帮助。

于 2013-01-28T07:25:42.757 回答