我当前正在使用以下代码:
prob = scipy.stats.norm(mu, np.sqrt(sigma)).pdf(o) # korrekt
return prob
我认为我对解释变量没有太多用,但是mu是期望值,sigma是我的方差,o是观察值,我想找到给定观察值的概率。它正在工作,但是由于我多次调用它而非常慢,并且仅通过编写正态分布并从中获得概率即可得到更快的结果。
我有更聪明的方法来调用此功能吗?
答案 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()
获得标准差。