在oneliner中选择数组中的n最大值

Fra*_*kje 2 arrays sorting matlab max

由于没有特殊原因,我想知道是否可以在一个数组或矩阵中选择n个最大值,所有这些都在oneliner中.

说我有阵列:

A=randn(1,100);
Run Code Online (Sandbox Code Playgroud)

我想要最大的,例如20个值,最好从高到低排序.到目前为止,我有2个班轮:

A_ordered = sort(A,'descend');
A_big20 = A_ordered(1:20);
Run Code Online (Sandbox Code Playgroud)

有谁知道这是否可能在一行?如果是这样,我会很感激线索,想法或答案!

Rod*_*uis 5

你说你做了很多,所以最简单和最好的方法是在MATLAB路径上定义一个函数:

function B = topN(A, n)

    if nargin==2 && n==0 
        B = []; return; end

    B = sort(A(:));
    if nargin>1 && n < numel(A)           
        B = B(1:n); end

end
Run Code Online (Sandbox Code Playgroud)

并称你的"一个"班轮:

top_ten = topN( randn(1,100), 10 );
Run Code Online (Sandbox Code Playgroud)

如果您希望它们按原始顺序(而不是排序):

function B = topN_unsorted(A, n)

    if nargin>1 && n==0 
        B = []; return; end

    if nargin==1 || n > numel(A)
        B = A; 
    else
        [B,I] = sort(A(:));
        B = B(I(1:n));
    end

end
Run Code Online (Sandbox Code Playgroud)