Найти 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 значений он выполнит свою работу!
Надеюсь, поможет!