2013-02-08 15 views
6

Używam Matlab 2012a.Znajdź n wartości minimalnych w tablicy

Mam tablicę k komórek (powiedzmy 1000). Muszę znaleźć 5 najniższych wartości tej tablicy i trzeba zrobić średnią tych wartości w X i Y.

Ktoś ma pomysł, jak to zrobić?

+1

Czy twoje pytanie o algorytm to zrobić? Z jakiego języka programowania korzystasz? – Alex

+0

Edytowałem, mój zły. Używam Matlab 2012a – Vissenbot

+0

Jaka jest struktura twoich danych? Wspominasz "tablica" i "komórki" oraz "X" i "Y". Utworzyłem odpowiedź zakładając, że macie tablice X i Y - ale ponownie czytając twoje pytanie Nie jestem pewien, co masz ... Czy możesz wyjaśnić? – Floris

Odpowiedz

13

zakładając, że masz tablice X i Y, a chcesz znaleźć pięć najniższych wartości Y:

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

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

Objaśnienie:

Komenda sort z dwóch parametrów wyjściowych zwraca zarówno posortowaną tablicę (w m) i indeksy w oryginalnej tablicy (mi). Pierwsze pięć indeksów mi(1:5) odpowiada pięciu najniższym wartościom. Wybranie mean tych wartości dla X i Y zrobi to, co chcemy. Jeśli nie rozumiem twojego problemu, wyjaśnij swoje pytanie, a ja zrobię to innym razem.

+0

ahh, pobij mnie do tego ^^ – Groot

+0

Tak, przepraszam, nie byłem wystarczająco jasny. Muszę znaleźć 5 najniższych wartości w Y, a następnie zrobić średnią zarówno z X jak i Y z tych 5 punktów! Twoja technika była jednak całkiem interesująca! Będę pamiętać o tej sztuczce, jeśli się przyda. – Vissenbot

+0

Moja technika robi dokładnie to, o co prosisz ... Zmodyfikowałem kod, aby było jeszcze wyraźniejsze. Jeśli nadal nie działa dla ciebie, musisz wyjaśnić swoją strukturę danych jaśniej. – Floris

1

Co powiesz na wykonanie sort swojej tablicy od najniższej wartości do najwyższej, a następnie wybranie 5 pierwszych wartości. Będą to 5-minutowe wartości twojej tablicy. Następnie wykonaj średnią z tych 5 wartości.

To może nie być najwydajniejszy sposób na zrobienie tego, ale za jedyne 1000 wartości wykona zadanie!

Mam nadzieję, że pomoże!

1

użycie minmaxselection pakiet MATLAB MEX, który został specjalnie zoptymalizowany dla tego problemu:

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

<< ans = 
<< -2 2  

mink(a,4) 

<< ans = 
<< -2  2  3  4 
Powiązane problemy