Find top n elements in matrix

前端 未结 3 1344
春和景丽
春和景丽 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
    

提交回复
热议问题