Find top n elements in matrix

前端 未结 3 1345
春和景丽
春和景丽 2021-01-26 16:39

I have a matrix which contains values and I wish to find the index of the top n minimum values.

I use the following code for finding the minimum most value:

相关标签:
3条回答
  • 2021-01-26 17:35

    Use prctile (Statistics Toolbox) to find the appropriate threshold, and then use indexing to select the elements above that threshold:

    x = magic(4); %// example
    n = 5; %// we want the top n elements
    M = numel(x);
    p = prctile(x(:), (M-n)/M*100);
    indices = find(x>p); %// result in the form linear indices
    [row, col] = find(x>p); %// result in the form of row and column indices
    

    In this example:

    >> x
    x =
        16     2     3    13
         5    11    10     8
         9     7     6    12
         4    14    15     1
    >> indices.'
    ans =
         1     8    12    13    15
    >> row.'
    ans =
         1     4     4     1     3
    >> col.'
    ans =
         1     2     3     4     4
    >> x(indices).'
    ans =
        16    14    15    13    12
    

    Example with repeated elements:

    >> x = [1 1 2 5; 3 4 3 5];
    >> n = 5;
    

    gives

    >> indices.'
    ans =
         2     4     6     7     8
    >> row.'
    ans =
         2     2     2     1     2
    >> col.'
    ans =
         1     2     3     4     4
    >> x(indices).'
    ans =
         3     4     3     5     5
    
    0 讨论(0)
  • 2021-01-26 17:41

    Or without Intersect in the other answer

    [sorted,I] = sort(Result(:));
    [r,c] = ind2sub(size(Result),I(1:10));  %//Change 10 to any other required value
    
    0 讨论(0)
  • 2021-01-26 17:44

    Maybe you could do something like this:

    sorted = sort(Result(:));
    topten = sorted(1:10);
    [~,ia,~] = intersect(Result(:),topten(:)); % // Get the indices of the top ten values
    [r,c]=ind2sub(size(Result),ia); % // Convert the indices to rows and columns
    
    0 讨论(0)
提交回复
热议问题