我说有一个阵列A = [ 3 5 6 7 ].我知道我可以获得此数组的最大值max(A)并返回7,但是如何在6不排序或删除第一个最大值的情况下从此数组中获取第二个max()?
我可以提出以下棘手的解决方案:
second_max_value = max(A(A~=max(A)))
Run Code Online (Sandbox Code Playgroud)
这里A(A~=max(A))将是不包含原始数组的最大值的临时数组.比你收到这个数组的最大值.
首先,除非你真的有很大的向量,否则使用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)