繁体   English   中英

scipy.stats模块和numpy.random模块之间有什么区别,两个模块之间的类似方法有什么区别?

[英]what is the difference between scipy.stats module and numpy.random module, between similar methods that both modules have?

我在python上查看了一些分发函数:

均匀,二项式,伯努利,正态分布

我发现scipy和numpy都有相同的功能。

>>> from scipy.stats import binom
>>> rv = binom(n, p)

>>> import numpy as np
>>> s = np.random.binomial(n, p, 1000)

仔细检查代码,我发现scipy在内部使用了numpy:

https://github.com/scipy/scipy/blob/master/scipy/stats/_discrete_distns.py

https://github.com/numpy/numpy/blob/master/numpy/random/mtrand/distributions.c

那么,我的问题是拥有2份相同分配函数的主要动机是什么?

scipy库提供了哪些额外的功能,而不是numpy?

每个模块中的完整方法列表如下:

Numpy Random模块: https//docs.scipy.org/doc/numpy/reference/routines.random.html

Scipy stats模块: https ://docs.scipy.org/doc/scipy/reference/stats.html

我发现了两个模块之间的一些基本区别: scipy.stats的随机抽取之间的差异...... rvs和numpy.random

scipy生成随机变量,而numpy生成随机数 当您使用np.random.binomial(n, p, 1)它仅仅是一个实现了随机变量(的binom(n, p)

在概率和统计中,随机变量的实现或观察值是实际观察到的值(实际发生的情况)。 随机变量本身就是决定观察结果的过程。 从实现中计算而不部署统计模型的统计量通常被称为“经验”,如经验分布函数或经验概率。

一般来说,numpy的作用是多次掷骰子。 另一方面,scipy告诉你连续获得两个六的概率是多少。 如果你将硬币翻转一百次, 预期的尾巴数量是多少。

当然你可以在numpy中运行模拟并近似这些值(翻转一百万次硬币,尾巴数量约为50万)。 然而,这只是实验的结果。 一个随机变量告诉你理论解决方案(对于二项式,这是np ,其中n是试验次数,p是概率。所以你会得到50万。


这是一个小小的演示:

import scipy.stats as ss
import numpy as np

n, p = 10**4, 0.3
rv  = ss.binom(n, p)

获得随机变量的均值和标准差:

rv.mean()
Out: 3000.0

rv.std()
Out: 45.825756949558397

从该分布生成100个随机数:

prng = np.random.RandomState(0)    
random_numbers = prng.binomial(n, p, size=100)

计算平均值和标准差:

random_numbers.mean()
Out: 3004.8099999999999
random_numbers.std()
Out: 47.336813369723146

再产生100个:

prng = np.random.RandomState(1)
random_numbers = prng.binomial(n, p, size=100)

不同的均值和标准差:

random_numbers.mean()
Out: 2990.96

random_numbers.std()
Out: 46.245631145006548

您进一步增加样本量,均值和标准差将接近分布均值和分布标准差:

random_numbers = prng.binomial(n, p, size=10**7)

random_numbers.mean()
Out: 2999.9639155

random_numbers.std()
Out: 45.854409513250303

scipy库提供了哪些额外的功能,而不是numpy?

如果您查看其中一个单独发行版(例如, 测试版 )的文档,您可以看到其他功能。 numpy函数只允许绘制随机值。 scipy发行版有许多额外的方法用于其他事物,如百分位数,累积分布函数,以及平均值和标准差等统计数据。

scipy给你的一些信息不能直接从numpy函数中计算出来。 numpy函数仅为您提供随机绘制的单个值,但scipy以数学方式表示分布,并且可以在不实际绘制任何值的情况下计算某些内容。 例如,scipy分布返回的许多统计数据都是用精确的数学公式计算的。 您可以在链接到的源中看到,例如,binom_gen._stats直接计算mean,stdev等。 要使用numpy找到平均值,你必须绘制一堆值(理论上是无限数)并计算它们的平均值; scipy抽象地抽象而不绘制任何值。 scipy发行版揭示了numpy无法获得的分布的数学细节。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM