似乎如果它是相同的分发,从numpy.random绘制随机样本比从scipy.stats .-.rvs更快.我想知道两者之间的速度差异是什么?
解决方法
scipy.stats.uniform实际上使用numpy,这里是stats中的相应函数(mtrand是numpy.random的别名)
class uniform_gen(rv_continuous): def _rvs(self): return mtrand.uniform(0.0,1.0,self._size)
scipy.stats有一个错误检查的开销,使界面更加灵活.只要您不为每个绘图的循环调用uniform.rvs,速度差应该是最小的.你可以一次得到所有的随机抽奖,例如(1000万)
>>> rvs = stats.uniform.rvs(size=(10000,1000)) >>> rvs.shape (10000,1000)
这是我刚才写的长的答案:
scipy / numpy中的基本随机数由…创建
Mersenne-Twister PRNG in numpy.random.随机数
在numpy.random中的分布是在cython / pyrex和相当快.
scipy.stats没有随机数生成器,随机数是
以三种方式获得:
>直接从numpy.random,例如正常,t,…相当快>通过转换其他随机数的随机数可用于numpy.random,也很快,因为这样操作整个数组通用:唯一的通用代生成随机数生成使用ppf(逆cdf)来转换均匀随机数.这是相对较快的,如果有一个明确的表达式ppf,但是如果必须计算ppf,可能非常慢间接的影响.例如,如果只定义了pdf,那么cdf是通过数值积分获得,ppf是通过获得的方程求解器.所以几个发行版很慢.