Как найти индекс n наименьших элементов в векторе
Как я могу получить индексы "n наименьших элементов" в 1D-массиве в MATLAB?
Массив - это вектор строки.
Я могу найти наименьший элемент и его индекс, используя:
[C, ind] = min(featureDist);
Вектор похож:
featureDist =
Columns 1 through 8
48.4766 47.3743 59.5736 59.7450 55.0489 58.2620 63.3865 50.1101
и т.д.
Ответы
Ответ 1
Вы можете использовать функцию sort
. Чтобы получить наименьшие n элементов, вы можете написать такую функцию:
function [smallestNElements smallestNIdx] = getNElements(A, n)
[ASorted AIdx] = sort(A);
smallestNElements = ASorted(1:n);
smallestNIdx = AIdx(1:n);
end
Попробуйте с вашим массивом:
B = [48.4766 47.3743 59.5736 59.7450 55.0489 58.2620 63.3865 50.1101];
[Bsort Bidx] = getNElements(B, 4);
возвращает
BSort =
47.3743 48.4766 50.1101 55.0489
Bidx =
2 1 8 5
Ответ 2
Я знаю, что это очень поздний ответ, но я надеюсь помочь любому, у кого может быть этот вопрос позже.
Если A - это массив элементов, yu может попытаться использовать функцию find для определения индекса n наименьших элементов.
[~, idx] = find (A > -Inf, n, 'first')
Чтобы определить n наибольших элементов,
[~, idx] = find (A < Inf, n, 'last')