我之前道歉並不是很精確,因爲我不知道我想要的數學表達式。在數據集中查找'邊緣案例'
我正在使用matplotlib來分析大型數據集。我現在擁有的是x,y點的分佈。我想找出我的函數的x值相同的情況,但是y最大。所以,如果我繪製它,一部分的情況是在我的圖表頂部,另一部分是圖表的底部。 (x,y),(x,y')其中f(x)= y和f(x)= y'和y-y'= max?
歡呼聲
我之前道歉並不是很精確,因爲我不知道我想要的數學表達式。在數據集中查找'邊緣案例'
我正在使用matplotlib來分析大型數據集。我現在擁有的是x,y點的分佈。我想找出我的函數的x值相同的情況,但是y最大。所以,如果我繪製它,一部分的情況是在我的圖表頂部,另一部分是圖表的底部。 (x,y),(x,y')其中f(x)= y和f(x)= y'和y-y'= max?
歡呼聲
不知道我是否正確,但是明白這裏是一個原始的解決方案,你可以適應:
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上最大的差異點。您可以根據您的要求進行調整。
我想你想要的是一個方差圖。爲不同的x值創建一個字典。將y的每個不同值放入與每個x關聯的列表中。找到與每個x關聯的列表的stdev(np.std),說「s」。繪製s對x。
定義「相同」...你正在處理離散值(例如'x'是某種標籤或整數)或連續值(在這種情況下,你可能需要'1.0'和'1.000000000000001'來處理是相同的」)?如果你正在處理離散值,解決方案非常簡單。如果你處理的是連續值,那就更復雜一些了(最簡單的解決方法就是把你的'x'值)。 –