在matlab中获取第二个最大元素

Yus*_*sef 4 matlab

我说有一个阵列A = [ 3 5 6 7 ].我知道我可以获得此数组的最大值max(A)并返回7,但是如何在6不排序或删除第一个最大值的情况下从此数组中获取第二个max()?

Dan*_*sky 8

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

second_max_value = max(A(A~=max(A)))
Run Code Online (Sandbox Code Playgroud)

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


X''*_*X'' 6

首先,除非你真的有很大的向量,否则使用unique并获得倒数第二个索引.

如果你想保留max元素而你的vector不包含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]
Run Code Online (Sandbox Code Playgroud)

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

if length(max_idx)>1, second_max_value=max_value, end
Run Code Online (Sandbox Code Playgroud)

更新:

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

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

[~, idx] = sort(A);
A(idx(1)) % is the max value
A(idx(2)) % is the second max value
Run Code Online (Sandbox Code Playgroud)