关于使用scipy.stats.uniform的错误

时间:2015-04-10 07:35:49

标签: python statistics scipy ipython

我在Spyder 2.3.4中使用python 3.4

我想使用scipy.stats.uniform中的均匀分布函数。我写了两个不同的代码来导入这个函数,只有一个工作。我不知道为什么。我也有问题来自工作的结果。由于我的3个问题都基于相同的代码,因此最好在一个帖子中全部询问。

不起作用的代码(代码1)

import scipy as sp
a = 0
b = 1
mean = (a+b)/2
variance = 1/12*(b-a)**2
std = sp.sqrt(variance)
rv = sp.stats.uniform.rvs(loc = mean, scale = std, size = 10)
a = rv(>=0.5)*1
print(a)     

当我运行程序时,它说“AttributeError:'module'对象没有属性'stats'”。

有效的代码(代码2)

import scipy as sp
from scipy.stats import uniform
# form a unifrom distribution bewteen 0 and 1.
a = 0
b = 1
mean = (a+b)/2
variance = 1/12*(b-a)**2
std = sp.sqrt(variance)
rv = uniform.rvs(loc = mean, scale = std, size = 10)
a = (rv>=0.5)*1
print(a)

我确信没有语法错误。我可以在我的电脑上运行它。

我的问题:

  1. 由于“统计数据”处于“scipy”状态,为什么代码1中的sp.stats.uniform不起作用?代码1和代码2之间的区别在于:在代码1中,我只import scipy as sp,然后尝试通过sp.stats.uniform调用函数统一;在代码2中,我首先from scipy.stats import uniform,然后通过uniform调用函数统一。

  2. 在代码2中,以下语法正常。

    rv = sp.stats.uniform.rvs(loc = mean, scale = std, size = 6)
    

    似乎如果我调用from scipy.stats import uniform(如代码2的开头),那么我可以使用sp.stats.uniform。为什么呢?

  3. 正如您在代码2中所看到的,我想从0到1之间的均匀分布生成10个随机点。根据理论,它的均值为0.5,标准差为sqrt(1/12)。我所期望的是,生成的10个点将比0.5更多或更少5点,比0.5更大5点。但结果“a”只包含1,意味着“rv”总是大于0.5。我是否正确使用了“统一”功能?

0 个答案:

没有答案