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