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