2013-02-08 60 views
6

我正在使用Matlab 2012a。在數組中找到n個最小值

我有一個k個單元格的數組(例如1000)。我需要找到這個陣列的5個最低值,並且需要在X和Y上做這些值的平均值。

任何人都有一個想法如何做到這一點?

+1

您對算法做這個問題?你使用什麼編程語言? – Alex 2013-02-08 14:36:53

+0

我編輯,我的壞。我正在使用Matlab 2012a – Vissenbot 2013-02-08 14:57:37

+0

你的數據的結構是什麼?你提到「陣列」和「細胞」和「X」和「Y」。假設你有數組X和Y,我創建了一個答案 - 但重新閱讀你的問題我並不確定你有什麼......你能澄清嗎? – Floris 2013-02-08 15:09:58

回答

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)對應於五個最低值。將X和Y的這些值的mean作爲我們想要的。如果我不明白你的問題陳述,請澄清你的問題,我會再試一次。

+0

啊,打我吧^^ – Groot 2013-02-08 15:04:36

+0

是的,對不起,我還不夠清楚。 我需要找到Y中的5個最低值,然後對這5個點的X和Y進行平均。 雖然你的技術很有趣!如果它派上用場,我會記住這個技巧! – Vissenbot 2013-02-08 15:11:47

+0

我的技巧完全符合您的要求......我編輯了代碼,使其更加清晰。如果它仍然不適合你,你需要更清楚地解釋你的數據結構。 – Floris 2013-02-08 15:16:17

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 
相關問題