2013-02-08 5 views
6

Я использую Matlab 2012a.Найти n минимальных значений в массиве

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

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

+1

Ваш вопрос об алгоритме, чтобы сделать это? Какой язык программирования вы используете? – Alex

+0

Я отредактировал, мой плохой. Я пользуюсь Matlab 2012a – Vissenbot

+0

Какая структура ваших данных? Вы указываете «массив» и «ячейки» и «X» и «Y». Я создал ответ, предполагая, что у вас есть массивы X и Y, но перечитывая свой вопрос, я на самом деле не уверен, что у вас есть ... Можете ли вы уточнить? – Floris

ответ

13

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

+0

ах, избили меня ^^ – Groot

+0

Да, извините, я не был достаточно ясен. Мне нужно найти 5 наименьших значений в Y, а затем сделать среднее значение как X, так и Y этих 5 баллов! Ваша техника была довольно интересной, хотя! Я буду держать этот трюк в уме, если он пригодится! – Vissenbot

+0

Моя техника делает именно то, о чем вы просите ... Я редактировал код, чтобы сделать его еще более ясным. Если он по-прежнему не работает для вас, вам нужно более четко объяснить свою структуру данных. – Floris

1

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

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

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

1

использование 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 
Смежные вопросы