【问题标题】:Index of max and min value in an array数组中最大值和最小值的索引
【发布时间】:2013-01-11 11:29:06
【问题描述】:

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

例如,如果我有:

a = [1 2 999 3];

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

同样用于定义indexMin

【问题讨论】:

  • 这个问题有问题。 @EvgeniSergeev 确实想在数组中找到最大值或最小值的索引。他为它使用了名称“argmax”(以及组成的函数“argmax(a)”)。但是 argmax 是不同的 (en.wikipedia.org/wiki/Arg_max)。因此,如果您真的在 MATLAB 中寻找 argmax 函数,这个问题真的很令人困惑。

标签: matlab matrix


【解决方案1】:

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

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

the_max =

   999


index_of_max =

     3

min 也是如此。

【讨论】:

    【解决方案2】:

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

     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 )(我将把它作为一个小练习留给你看@ 987654332@ 有)。

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

    【讨论】:

    • 练习的解决方案:max(X, Y) 是一个元素方式的最大值(就像 .* 是一个元素方式的乘法一样)......具有通常的标量行为,即。 XY 的大小必须相同,或者其中一个可以是标量。
    • 嗯......获得所有这些分数是件好事。我只是还没决定要怎么花呢。
    • @EvgeniSergeev - 把它们藏在你的床底下!
    • 这并没有留下太多我可以回答的内容。
    【解决方案3】:

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

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

    显然,同样的过程也适用于max

    我希望这会有所帮助。

    【讨论】:

    • 这在可能存在多个相等最大元素并且希望获取所有索引的情况下很有用。
    猜你喜欢
    • 2019-08-21
    • 2021-12-03
    • 2021-08-17
    • 2019-09-11
    • 1970-01-01
    • 2013-09-02
    • 1970-01-01
    • 1970-01-01
    • 2022-12-02
    相关资源
    最近更新 更多