2013-02-08 26 views
6

Matlab 2012a kullanıyorum.Dizide n minimum değerler bulun

Bir dizi k hücrem var (1000). Bu dizinin en düşük 5 değerini bulmam gerekiyor ve bu değerlerin X ve Y değerlerinde bir ortalama yapması gerekiyor.

Bunun nasıl yapılacağı konusunda bir fikri olan var mı?

+1

bunu algoritması hakkında soru mi? Hangi programlama dilini kullanıyorsunuz? – Alex

+0

Düzenledim, kötüyüm. Matlab 2012a kullanıyorum – Vissenbot

+0

Verilerinizin yapısı nedir? "Dizi" ve "Hücreler" ve "X" ve "Y" den bahsediyorsunuz. X ve Y dizileriniz olduğunu varsayarak bir cevap oluşturdum - ama sorunuzu yeniden okudum Aslında ne yaptığınızdan emin değilim ... Netleştirebilir misiniz? – Floris

cevap

13

Eğer diziler X ve Y sahip varsayarsak, ve beş düşük Y değerleri bulmak istiyorum:

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

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

Açıklama:

iki çıkış parametreleri ile sort komut içinde (sıralı dizi hem döndürür

m) ve orijinal dizideki dizinler (mi). İlk beş gösterge mi(1:5), beş en düşük değere karşılık gelir. X ve Y için bu değerlerin mean değerini almak istediğimizi yapar. Sorun bildiriminizi anlamadıysan lütfen sorunuza açıklık getirin ve bir başka çekim yapacağım.

+0

ahh, bana onu yendi ^^ – Groot

+0

Evet, üzgünüm yeterince açık değildim. Y'de 5 en düşük değeri bulmalı ve sonra bu 5 noktanın hem X hem de Y ortalamasını almalıyım! Tekniğiniz oldukça ilginçti! Kullanışlı olursa, bu hileyi aklımda tutacağım! – Vissenbot

+0

Tekniğim tam olarak ne istediğini yapıyor ... Kodu daha net hale getirmek için düzenledim. Eğer hala işe yaramazsa, veri yapınızı daha açık bir şekilde açıklamanız gerekir. – Floris

1

Dizininizin en düşük değerinden en yüksek değerine sort yapıp ardından ilk 5 değeri seçmeye ne dersin. Bunlar dizininizin 5 dakikalık değerleri olacak. Daha sonra bu 5 değerin ortalamasını yapın.

Bu, bunu yapmanın en bellek etkin yolu olmayabilir, ancak yalnızca 1000 değer için iş bitecektir!

Umut eder!

1

kullanımı özel olarak bu soruna yönelik optimize edilmiştir minmaxselection MATLAB MEX paketi:

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

<< ans = 
<< -2 2  

mink(a,4) 

<< ans = 
<< -2  2  3  4 
İlgili konular