2015-03-15 2 views
4

У меня есть два массива. x - независимая переменная, а counts - количество отсчетов x, как, например, гистограмма. Я знаю, что может вычислить среднее пути определения функции:Вычислить моменты (среднее, дисперсия) распределения в python

def mean(x,counts): 
    return np.sum(x*counts)/np.sum(counts) 

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

+3

Возможно, релевантно: http://stackoverflow.com/questions/2413522/weighted-standard-deviation-in-numpy –

+4

(ваша функция 'mean' также может быть записана' np.average (x, weights = counts) ') –

ответ

4

Вы можете использовать moment function от scipy. Он вычисляет n-й центральный момент ваших данных.

Вы также можете определить свою собственную функцию, которая могла бы выглядеть примерно так:

def nmoment(x, counts, c, n): 
    return np.sum(counts*(x-c)**n)/np.sum(counts) 

В этой функции, c предназначается, чтобы быть точка, вокруг которой берется момент, а п есть порядок. Итак, чтобы получить дисперсию, вы можете сделать nmoment(x, counts, np.average(x, weights=counts), 2).

+0

Что такое 'counts'? не должен быть моментом 'np.mean ((x-c)^n)'? – Lee

+0

@ Ли, это действительно вопрос для ОП, поскольку я только что повторил их использование 'counts'. Похоже, что это, по сути, весовой вектор, который показывает, сколько веса каждой точки данных. –

Смежные вопросы