2015-04-13 3 views
0

У меня есть матрица, которая содержит значения, и я хочу найти индекс верхних n минимальных значений.Найти верхние n элементов в матрице

Я использую следующий код для нахождения минимального наибольшую ценность:

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

Я не могу найти какой-либо другой questions на переполнение стека, которые отвечают на вопрос, пожалуйста, помогите

ответ

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

В третьей строке вы указываете 'A', пожалуйста, проверьте. –

+1

@AbhishekBhatia Должен быть «Результатом». Я исправил это. Извиняюсь ... – kkuilla

1

Или без Intersect в other answer

[sorted,I] = sort(Result(:)); 
[r,c] = ind2sub(size(Result),I(1:10)); %//Change 10 to any other required value 
1

Использование prctile (Statistics Toolbox), чтобы найти соответствующий порог, а затем использовать индексацию для выбора выше этого порога элементы:

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 

Пример с повторяющиеся элементы:

g ives

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