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

标签 python numpy random scipy

似乎如果它是相同的分布,从 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 有一些开销用于错误检查和使接口(interface)更灵活。只要您不在每次绘制的循环中调用 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:唯一的generic generation随机数生成是通过 使用 ppf(逆 cdf)变换均匀随机数。 如果有明确的表达式,这会相对较快 ppf,但如果必须计算 ppf,可能会非常慢 间接地。例如,如果只定义了 pdf,则 cdf 是 通过数值积分获得,ppf 是通过获得 方程求解器。所以一些发行版非常慢。

关于python - scipy.stats 随机抽取之间的区别....rvs 和 numpy.random,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4001577/

相关文章:

python - 如何使用 HMAC-SHA512 和 Python 请求库签署 POST 请求?

python - 夏娃框架: on_update hook

python - Flake8 使用系统 python 而不是 virtualenv

python - 如何每天在Azure上运行一个短暂运行的Docker容器?

python - 如何规范化大型 numpy 数组? - 内存错误

python - 我可以在过滤 numpy 数组方面做得更好吗

python - 正确打印完整阵列

C++ 11 std::binomial_distribution 不稳定

arrays - 创建一个随机真/假数组

java - 显示 3 张随机卡 JavaFX