2012-01-26 38 views
2

我之前道歉並不是很精確,因爲我不知道我想要的數學表達式。在數據集中查找'邊緣案例'

我正在使用matplotlib來分析大型數據集。我現在擁有的是x,y點的分佈。我想找出我的函數的x值相同的情況,但是y最大。所以,如果我繪製它,一部分的情況是在我的圖表頂部,另一部分是圖表的底部。 (x,y),(x,y')其中f(x)= y和f(x)= y'和y-y'= max?

歡呼聲

+0

定義「相同」...你正在處理離散值(例如'x'是某種標籤或整數)或連續值(在這種情況下,你可能需要'1.0'和'1.000000000000001'來處理是相同的」)?如果你正在處理離散值,解決方案非常簡單。如果你處理的是連續值,那就更復雜一些了(最簡單的解決方法就是把你的'x'值)。 –

回答

1

不知道我是否正確,但是明白這裏是一個原始的解決方案,你可以適應:

from collections import defaultdict 

input = [(1.2,2), (1.2, 6), (1.2, -2), (2,8), (2,7), (2,18)] 

indices_dict = defaultdict(lambda: list([[], []])) 

for idx, val in enumerate(input): 
    indices_dict[val[0]][0].append(idx) 
    indices_dict[val[0]][1].append(val[1]) 

for key in indices_dict: 
    y_values = indices_dict[key][1] 
    idx_values = indices_dict[key][0] 
    max_idx = idx_values[y_values.index(max(y_values))] 
    min_idx = idx_values[y_values.index(min(y_values))] 
    print 'Max diff for x=%s is found between points %s and %s' %(key, input[min_idx], input[max_idx]) 

這應該打印每個不同的X具有Y上最大的差異點。您可以根據您的要求進行調整。

1

我想你想要的是一個方差圖。爲不同的x值創建一個字典。將y的每個不同值放入與每個x關聯的列表中。找到與每個x關聯的列表的stdev(np.std),說「s」。繪製s對x。