统计数据,如何使其更快/是否可能?

时间:2019-01-03 15:16:23

标签: python

我当前正在使用以下代码:

prob = scipy.stats.norm(mu, np.sqrt(sigma)).pdf(o)  # korrekt
    return prob

我认为我对解释变量没有太多用,但是mu是期望值,sigma是我的方差,o是观察值,我想找到给定观察值的概率。它正在工作,但是由于我多次调用它而非常慢,并且仅通过编写正态分布并从中获得概率即可得到更快的结果。

我的问题:

我有更聪明的方法来调用此功能吗?

1 个答案:

答案 0 :(得分:1)

两种方法...

向量化

利用scipy / numpy对数组进行计算的事实...

import numpy as np
from scipy.stats import norm

observations = np.random.rand(1000)
mu = np.mean(observations)
sigma = np.var(observations)
norm(mu, np.sqrt(sigma)).pdf(observations)

列表理解

这要慢很多,但是如果您的观察结果在列表中,那么您可以...

list_of_observations = list(np.random.rand(1000))
mu = np.mean(list_of_observations)
sigma = np.var(list_of_observations)
prob = [norm(mu, np.sqrt(sigma)).pdf(o) for o in list_of_observations]

...但是很容易将列表转换为数组并使用前一种解决方案,因为您可以使用np.asarray()将列表转换为数组...

norm(mu, np.sqrt(sigma)).pdf(np.asarray(list_of_observations))

还请注意,如果您自己计算方差(sigma,而不是使用np.var(),则可以直接使用np.std()获得标准差。