4

我有一个数组,比如说A = [ 3 5 6 7 ]。我知道我可以得到这个数组的最大值max(A)并返回7,但是我怎样才能6从这个数组中得到第二个最大值()而不排序或删除第一个最大值?

4

3 回答 3

8

我可以提出以下棘手的解决方案:

second_max_value = max(A(A~=max(A)))

这里A(A~=max(A))将是不包含原始数组最大值的临时数组。比你收到这个数组的最大值。

于 2012-12-02T14:40:17.257 回答
7

首先,除非你有非常大的向量,否则使用 unique 并获取倒数第二个索引。

如果您希望保留最大元素并且您的向量不包含 NaN,您可以尝试:

[max_value,max_idx] = max(A);  % [3 5 6 7]
A(idx) = NaN;              % [3 5 6 NaN]
second_max_value = max(A); % 6
A(idx) = max_value;        % [3 5 6 7]

如果您有多个具有相同最大值的索引,您可以选择包括

if length(max_idx)>1, second_max_value=max_value, end

更新:

根据问题旁边OP的评论,让我补充一下:

您也可以在更改原始数组的情况下使用排序:

[~, idx] = sort(A);
A(idx(end)) % is the max value
A(idx(end-1)) % is the second max value
于 2012-12-02T13:35:12.633 回答
2

关于什么

        B = unique(A);      % // Finds unique values and sorts
        max_2 = B(end-1);   % // Second maximum

?

测试:

     A= [ 3 5 6 7  2 4]
     B = unique(A)
     B(end-1)

        ans =

            6
于 2012-12-02T13:07:26.770 回答