scipy.stats....rvs 和 numpy.random 随机抽取之间的区别

2024-05-08

看起来是否是相同的分布,从中抽取随机样本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 中的基本随机数是由以下命令创建的 numpy.random 中的 Mersenne-Twister PRNG。的随机数为 numpy.random 中的分布位于 cython/pyrex 中,并且速度相当快。

scipy.stats 没有随机数生成器,随机数是 通过以下三种方式之一获得:

  • 直接来自 numpy.random,例如正常,t,...相当快

  • 通过其他随机数的变换得到的随机数 在 numpy.random 中可用,也非常快,因为它运行在 整个数字数组

  • generic:唯一通用的随机数生成是由 使用 ppf(逆 cdf)来变换均匀随机数。 如果有明确的表达式,则速度相对较快 ppf,但可以very如果必须计算 ppf,则速度较慢 间接地。例如,如果仅定义了 pdf,则 cdf 为 通过数值积分获得,ppf 通过以下方式获得 方程求解器。所以一些发行版非常慢。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

scipy.stats....rvs 和 numpy.random 随机抽取之间的区别 的相关文章

随机推荐