Найти n минимальных значений в массиве


Я использую Matlab 2012a.

У меня есть массив из k ячеек (скажем, 1000). Мне нужно найти 5 самых низких значений этого массива и нужно сделать среднее из этих значений в X и Y.

У кого-нибудь есть идея, как это сделать?

3 6

3 ответа:

Предположим, что у вас есть массивы X и Y, и вы хотите найти пять самых низких значений Y:

[m mi] = sort(Y);
lowest5index = mi(1:5);
lowest5Y = Y(lowest5index);
lowest5X = X(lowest5index);

meanYlowest5 = mean(lowest5Y);
meanXlowest5 = mean(lowest5X);

Пояснение:

Команда sort с двумя выходными параметрами возвращает как отсортированный массив (вm), так и индексы в исходном массиве (mi). Первые пять индексов mi(1:5) соответствуют пяти самым низким значениям. Принимая mean из этих значений как для X, так и для Y, мы сделаем то, что хотим. Если я не понял вашу постановку проблемы, пожалуйста, уточните свой вопрос, и я возьму еще один выстрел в него.

Как насчет того, чтобы сделать sort вашего массива от самого низкого значения до самого высокого, а затем выбрать 5 первых значений. Это будут 5-минутные значения вашего массива. Затем выполните среднее из этих 5 значений.

Это может быть не самый эффективный способ сделать это, но всего за 1000 значений он выполнит работу!

Надеюсь, это поможет!

Использование minmaxselection пакет MATLAB MEX, который был специально оптимизирован для этой задачи:

a = [2,3,4,7,56,4,21, 64, -2];
mink(a, 2)

<< ans = 
<<    -2  2    

mink(a,4)

<< ans =
<<    -2     2     3     4