首页 > 解决方案 > 在 Python 中使用 numpy.random.choice 的更快替代方案?

问题描述

我的目标是在 Python 中生成一个大型二维数组,其中每个数字都是 0 或 1。为此,我创建了一个嵌套的 for 循环,如下所示:

    for count in range(0,300):
      block = numpy.zeros((8,300000))

      for a in range(0,8):
        for b in range(0,300000):
          block[a][b] = numpy.random.choice(2,1, p=[0.9,0.1])

该块有 90% 的机会选择“0”和 10% 的机会选择“1”。但是外部for循环处理一次需要超过1分钟。有没有更有效的方法来为大量数组选择随机数,同时仍然能够使用“P”值?(这是我的第一篇文章,如果格式损坏,请见谅)

标签: pythonpython-3.xnumpyrandom

解决方案


NumPy 背后的想法是不在Python 级别循环 720000000 次迭代。您应该使用整个数组操作,例如numpy.random.choice在一次调用中生成整个选择数组:

block = numpy.random.choice(2, size=(8, 300000), p=[0.9, 0.1])

这几乎立即完成。


推荐阅读