Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Scipy统计数据,如何让它更快/可能吗?_Python - Fatal编程技术网

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对于所有观察值都是常数吗?谢谢你的回答,我将不得不使用最后一个,我不允许在我的解决方案中使用平均值,我将尝试看看我得到了什么!我已经阐明了如何从列表中使用矢量化解决方案。恐怕我不明白你所说的“不允许在我的解决方案中使用手段”是什么意思。我特意直接从数据本身计算均值和方差,只是为了说明,如果你已经从其他数据/参数中得到了均值和方差,那么你可以使用它们。