Как найти индекс n наименьших элементов в векторе - программирование

Как найти индекс 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

и т.д.

4b9b3361

Ответ 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')