我在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)
我确信没有语法错误。我可以在我的电脑上运行它。
我的问题:
由于“统计数据”处于“scipy”状态,为什么代码1中的sp.stats.uniform
不起作用?代码1和代码2之间的区别在于:在代码1中,我只import scipy as sp
,然后尝试通过sp.stats.uniform
调用函数统一;在代码2中,我首先from scipy.stats import uniform
,然后通过uniform
调用函数统一。
在代码2中,以下语法正常。
rv = sp.stats.uniform.rvs(loc = mean, scale = std, size = 6)
似乎如果我调用from scipy.stats import uniform
(如代码2的开头),那么我可以使用sp.stats.uniform
。为什么呢?
正如您在代码2中所看到的,我想从0到1之间的均匀分布生成10个随机点。根据理论,它的均值为0.5,标准差为sqrt(1/12)。我所期望的是,生成的10个点将比0.5更多或更少5点,比0.5更大5点。但结果“a”只包含1,意味着“rv”总是大于0.5。我是否正确使用了“统一”功能?