2013-05-20 107 views
2

我有一個相當具體的事情要做,不知道如何實現: 我有兩個列表,x和y,相應的值(每個列表中約10k)。Python:列表,bin和排序

首先,我需要根據它們在x中的順序將這兩個列表分別存儲在每個bin中具有N個值的bin中。所以我不能預先定義固定的邊框邊緣,我需要每個邊框中的10個值。

然後我需要計算每個x bin對應的10個y值的中值。

在最後一步中,我有第三個列表z,其中有更多的值,比如x(大約100k值),然後檢查每個值,其中x bin將落入並添加相應的平均值y bin(如:z + mean [y_m:y_n] [其中x_m < z < x_n]))。 任何想法如何做到這一點?謝謝!

回答

2

您可以訂購使用數據list.sort()然後用slicing來創建箱:

s.sort() 
bins = [] 
for i in range(0, len(s), 10): 
    bin = s[i: i+10] 
    bins.append(bin) 

要獲得每個區間的中位數,平均中間元素:

medians = [] 
for bin in bins: 
    middle = bin[4:6] 
    median = sum(middle)/float(len(middle)) 
    medians.append(median) 

這應該讓你開始。我不想剝奪你自己完成程序的喜悅:-)

+1

或'[s [i:i + 10] for i in range(0,len(s),10)]' – Elazar

+0

@Elazar是的,列表理解很好。 OTOH,初學者的問題通常應該用最簡單的工具來回答(即從Python教程開始的東西,而不是稍後介紹的技術)。 –

+0

謝謝,排序和切片很清楚(謝謝你的清單理解,但)。不過,我需要用x排序y,我相信這是可以用argsort。然而,下一步是我不確定的。說,我通過切片得到了bins_x和bins_y,而med_bins_y是[bins_y]中bin的[np.median(bin)]。如何檢查bins_x屬於哪個bin bins_x,因此我可以將med_bins_y的相應值添加到它中? – frixhax