首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >单个函数的Numpy均值和方差?

单个函数的Numpy均值和方差?
EN

Stack Overflow用户
提问于 2013-10-16 05:10:29
回答 3查看 16.5K关注 0票数 22

使用Numpy/Python,可以从单个函数调用中返回均值和方差吗?

我知道我可以分别计算它们,但需要平均值来计算样本标准偏差。因此,如果我使用单独的函数来获得均值和方差,则会增加不必要的开销。

我试着查看了这里的numpy文档(http://docs.scipy.org/doc/numpy/reference/routines.statistics.html),但没有成功。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-10-16 05:17:21

您不能将已知的均值传递给np.stdnp.var,您必须等待new standard library statistics module,但在此期间,您可以使用以下公式来节省一点时间:

In [329]: a = np.random.rand(1000)

In [330]: %%timeit
   .....: a.mean()
   .....: a.var()
   .....: 
10000 loops, best of 3: 80.6 µs per loop

In [331]: %%timeit
   .....: m = a.mean()
   .....: np.mean((a-m)**2)
   .....: 
10000 loops, best of 3: 60.9 µs per loop

In [332]: m = a.mean()

In [333]: a.var()
Out[333]: 0.078365856465916137

In [334]: np.mean((a-m)**2)
Out[334]: 0.078365856465916137

如果你真的想加快速度,试试np.dot来做平方和求和(因为这就是点积):

In [335]: np.dot(a-m,a-m)/a.size
Out[335]: 0.078365856465916137

In [336]: %%timeit
   .....: m = a.mean()
   .....: c = a-m
   .....: np.dot(c,c)/a.size
   .....: 
10000 loops, best of 3: 38.2 µs per loop
票数 27
EN

Stack Overflow用户

发布于 2017-08-02 09:42:20

你也可以通过利用信号的均值、方差和幂之间的关系来避免减法:

In [7]: import numpy as np

In [8]: a = np.random.rand(1000)

In [9]: %%timeit
   ...: a.mean()
   ...: a.var()
   ...: 
10000 loops, best of 3: 24.7 us per loop

In [10]: %%timeit
    ...: m = a.mean()
    ...: np.mean((a-m)**2)
    ...: 
100000 loops, best of 3: 18.5 us per loop

In [11]: %%timeit
    ...: m = a.mean()
    ...: power = np.mean(a ** 2)
    ...: power - m ** 2
    ...: 
100000 loops, best of 3: 17.3 us per loop

In [12]: %%timeit
    ...: m = a.mean()
    ...: power = np.dot(a, a) / a.size
    ...: power - m ** 2
    ...: 
100000 loops, best of 3: 9.16 us per loop
票数 1
EN

Stack Overflow用户

发布于 2019-04-04 08:32:57

我不认为NumPy提供了同时返回均值和方差的函数。

但是,SciPy提供了函数scipy.stats.norm.fit(),该函数返回样本的平均值和标准差。该函数以其更具体的目的命名,即将正态分布拟合到样本。

示例:

>>> import scipy.stats
>>> scipy.stats.norm.fit([1,2,3])
(2.0, 0.81649658092772603)

请注意,fit()不会将Bessel's correction应用于标准差,因此,如果您希望进行校正,则必须乘以适当的因子。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19391149

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档