4

私は配列を持っていますA = [ 3 5 6 7 ]。この配列の最大値を取得できることはわかってmax(A)いますが、最初の最大値を並べ替えたり削除したりせずに、この配列から72 番目の max ( ) を取得するにはどうすればよいでしょうか?6

4

3 に答える 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 に答える