使用Python计算分布的矩(均值、方差)

7

我有两个数组。x是自变量,counts是x出现次数的数量,就像一个直方图。我知道可以通过定义一个函数来计算平均值:

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

有没有一般的函数可以从由x和counts定义的分布中计算每个时刻?我还想计算方差。


3
可能相关:https://dev59.com/F3E95IYBdhLWcg3wMrEB - Alex Riley
6
你的函数 mean 也可以写成 np.average(x, weights=counts) - Alex Riley
3个回答

11
您可以使用moment函数来自于scipy。它可以计算数据的第n个中心矩。

您也可以定义自己的函数,可能看起来像这样:

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

在这个函数中,c代表取力矩的点,n代表阶数。因此,要计算方差可以使用nmoment(x, counts, np.average(x, weights=counts), 2)。请保留HTML标签。

1
counts是什么?难道moment不应该是np.mean((x-c)^n)吗? - wsdzbm
@Lee,这实际上是一个问题,需要问原帖作者,因为我只是重述了他们对“counts”的使用。看起来它本质上是一个权重向量,用于确定每个数据点的权重大小。 - Curt F.

2
import scipy as sp
from scipy import stats
stats.moment(counts, moment = 2) #variance

stats.moment返回第n个中心矩。


1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接