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

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

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

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

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 будет делать то, что мы хотим. Если я не понял вашу формулировку проблемы, уточните ваш вопрос, и я сделаю еще один снимок.

Использование 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

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

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

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

Другие вопросы по тегам