Python Scipy统计数据,如何让它更快/可能吗?
我目前正在使用以下代码:Python Scipy统计数据,如何让它更快/可能吗?,python,Python,我目前正在使用以下代码: prob = scipy.stats.norm(mu, np.sqrt(sigma)).pdf(o) # korrekt return prob 我不认为我解释变量有多大用处,但mu是期望值,sigma是我的方差,o是观察值,我想找出给定观察值的概率。它是有效的,但是它非常慢,因为我多次调用它,我从正态分布中得到了更快的结果,并从中获得了概率 我的问题: 有没有更聪明的方法来调用此函数?有两种方法 矢量化 利用scipy/numpy在阵列上执行计算这一事实
prob = scipy.stats.norm(mu, np.sqrt(sigma)).pdf(o) # korrekt
return prob
我不认为我解释变量有多大用处,但mu是期望值,sigma是我的方差,o是观察值,我想找出给定观察值的概率。它是有效的,但是它非常慢,因为我多次调用它,我从正态分布中得到了更快的结果,并从中获得了概率
我的问题:
有没有更聪明的方法来调用此函数?有两种方法
矢量化
利用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]
…但是将列表转换为数组并使用前一种解决方案很容易,因为您可以使用前一种解决方案将列表转换为数组
norm(mu, np.sqrt(sigma)).pdf(np.asarray(list_of_observations))
另外请注意,如果您自己计算方差(
sigma
),那么您可以直接使用np.std()
来获得标准偏差,而不是使用np.var()
。您的多个o
观测值是如何存储的?如果它们在一个列表中,那么你可以尝试使用。mu和sigma对于所有观察值都是常数吗?谢谢你的回答,我将不得不使用最后一个,我不允许在我的解决方案中使用平均值,我将尝试看看我得到了什么!我已经阐明了如何从列表中使用矢量化解决方案。恐怕我不明白你所说的“不允许在我的解决方案中使用手段”是什么意思。我特意直接从数据本身计算均值和方差,只是为了说明,如果你已经从其他数据/参数中得到了均值和方差,那么你可以使用它们。