Нахождение «крайних случаев» в наборе данных - PullRequest
2 голосов
/ 26 января 2012

Я заранее прошу прощения за то, что не очень точный, так как я не знаю математическое выражение для того, что я хочу.

Я использую matplotlib для анализа большого набора данных.Теперь у меня есть распределение точек х, у.Я хочу выяснить случаи, когда значения x моей функции одинаковы, но y отличается наибольшим.Так что, если я нарисую его, одна часть дел находится наверху моего графика, а другая - это основание графика.

Так, как я могу получить точки (x, y), (x, y '), где f (x) = y и f (x) = y' и y-y '= max?

ура

Ответы [ 2 ]

1 голос
/ 26 января 2012

Не уверен, правильно ли я понимаю, но вот необработанное решение, которое вы могли бы адаптировать:

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 голос
/ 26 января 2012

Я думаю, что вы хотите, это график отклонений. Создать словарь для различных значений х. Поместите каждое отдельное значение y в список, связанный с каждым x. Найдите stdev (np.std) списка, связанного с каждым x, скажем "s" Сюжет против х.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...