考虑代码:
import scipy.stats as ss
x = ss.uniform.rvs(np.zeros(5),np.array([1,2,3,4,5]))
我发现scipy.stats
的{{3}}有点稀疏。据我所知,我认为上面的代码应该在[0,1],[0,2],[0,3],[0,4]和[0,5]之间选择一个随机数。 ]。以下是documentation和rvs的文档。
相反,它在[0,1]中选择一个随机数p并返回[p,2p,3p,4p,5p]:
print x, np.diff(x)
[ 0.79352054 1.58704108 2.38056162 3.17408215 3.96760269]
[ 0.79352054 0.79352054 0.79352054 0.79352054]
这是种子相关的错误吗?或者预期会出现这种情况吗?
编辑:我知道很容易解决这个问题;无需告诉我如何:x=ss.uniform.rvs(size=5)*np.arange(1,5)
。这个错误或功能让我在我的大型程序中花费了几天的混乱和调试。
答案 0 :(得分:4)
这是一个错误:http://localhost:8080/SoccerSpringMaven3/springSoccer/users/
您的示例的另一种解决方法是明确地将In [1]: import scipy.stats as ss
In [2]: x = ss.uniform.rvs(np.zeros(5), np.array([1,2,3,4,5]))
In [3]: x
Out[3]: array([ 0.23848443, 0.47696885, 0.71545328, 0.9539377 , 1.19242213])
In [4]: x/x[0]
Out[4]: array([ 1., 2., 3., 4., 5.])
参数与您正在使用的参数一起提供。
例如,这是一个错误的案例:
size=5
解决方法是包含参数In [18]: x = ss.uniform.rvs(np.zeros(5), np.array([1,2,3,4,5]), size=5)
In [19]: x
Out[19]: array([ 0.67638863, 1.2253443 , 0.0812362 , 3.87469514, 3.88145975])
In [20]: x/x[0]
Out[20]: array([ 1. , 1.81159802, 0.12010285, 5.72850428, 5.73850534])
:
{{1}}
答案 1 :(得分:0)
我认为问题出现在uniform.rvs
,试图同时处理*args
和size
。如果我首先创建一个uniform
对象,然后调用rvs
,它似乎就会出现。
要产生3个均匀分布,在范围[0,1),[5,7),[10,13]上,我可以定义范围为0,5,10的uniform
个对象,和范围集1,2,3:
In [543]: u=stats.uniform(np.array([0,5,10]),np.array([1,2,3]))
现在,我可以生成具有兼容尺寸3维的任何尺寸分布:
In [544]: x = u.rvs((5,3))
In [545]: x
Out[545]:
array([[ 0.28689704, 6.60720428, 12.78343224],
[ 0.3058824 , 6.22486472, 11.5212319 ],
[ 0.32274603, 6.72905376, 10.90760859],
[ 0.98299464, 5.39877562, 12.00342556],
[ 0.76728063, 5.26172895, 10.38177301]])
In [546]: x.mean(axis=0)
Out[546]: array([ 0.53316015, 6.04432547, 11.51949426])
这可能只是围绕size
来电中丢失的stats.uniform.rvs
参数的另一种方式。