在矩阵中查找前n个元素

时间:2015-04-13 09:31:11

标签: matlab

我有一个包含值的矩阵,我希望找到最高n最小值的索引。

我使用以下代码查找最小值:

[r,c]=find(Result==min(min(Result)));

我无法在堆栈溢出上找到任何其他questions来回答这个问题,请帮忙

2 个答案:

答案 0 :(得分:2)

也许你可以这样做:

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

答案 1 :(得分:1)

使用prctile(统计工具箱)查找适当的阈值,然后使用索引选择高于该阈值的元素:

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

在这个例子中:

>> 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

重复元素的示例:

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

给出

>> 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