Numpy 意外的scipy.stats.uniform行为

Numpy 意外的scipy.stats.uniform行为,numpy,scipy,statistics,Numpy,Scipy,Statistics,以代码为例: import scipy.stats as ss x = ss.uniform.rvs(np.zeros(5),np.array([1,2,3,4,5])) 我发现forscipy.stats有点稀疏。据我所知,我认为上面的代码应该在[0,1]、[0,2]、[0,3]、[0,4]和[0,5]之间选择一个随机数。这是和的文档 相反,它在[0,1]中选取一个随机数p并返回[p,2p,3p,4p,5p]: print x, np.diff(x) [ 0.79352054 1.5870

以代码为例:

import scipy.stats as ss
x = ss.uniform.rvs(np.zeros(5),np.array([1,2,3,4,5]))
我发现for
scipy.stats
有点稀疏。据我所知,我认为上面的代码应该在[0,1]、[0,2]、[0,3]、[0,4]和[0,5]之间选择一个随机数。这是和的文档

相反,它在[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]
这是一个与种子相关的bug吗?或者这种行为是预期的

编辑:我知道这很容易解决;无需告诉我如何:
x=ss.uniform.rvs(尺寸=5)*np.arange(1,5)
。这个错误或功能让我花了几天时间在我的大型程序中进行混淆和调试。

这是一个错误:

对于您的示例,另一种解决方法是显式地给出
size
参数以及您已经使用的参数

例如,以下是buggy案例:

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])

在我看来,问题出在
uniform.rvs
中,它试图处理
*args
大小
。如果我首先创建一个
uniform
对象,然后调用
rvs
,它看起来会正常工作

为了在[0,1]、[5,7]、[10,13]范围内生成3个均匀分布,我可以定义一个
uniform
对象,范围起点为0,5,10,范围集为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])
这可能只是
stats.uniform.rvs
调用中缺少的
size
参数的另一种解决方法