私は配列を持っていますA = [ 3 5 6 7 ]
。この配列の最大値を取得できることはわかってmax(A)
いますが、最初の最大値を並べ替えたり削除したりせずに、この配列から7
2 番目の max ( ) を取得するにはどうすればよいでしょうか?6
質問する
21605 次
3 に答える
8
次のトリッキーな解決策を提案できます。
second_max_value = max(A(A~=max(A)))
A(A~=max(A))
元の配列の最大値を含まない一時的な配列になります。この配列の最大値を受け取るよりも。
于 2012-12-02T14:40:17.257 に答える
7
まず、非常に大きなベクトルがない限り、unique を使用して最後から 2 番目のインデックスを取得します。
max 要素を保持したい場合で、ベクトルに 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のコメントによると、追加させてください:
元の配列を変更せずにsort を使用することもできます。
[~, 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 に答える