【问题标题】:Generate n sets of random numbers without a loop [duplicate]在没有循环的情况下生成 n 组随机数
【发布时间】:2018-02-19 09:33:09
【问题描述】:

所以当我在 Python 中生成 1000 组随机数 (0..2000) 时,我可以轻松地执行以下操作:

iters = 1000
randIdx = []
numbers = range(0, 2000)
for i in range(iters):
        randIdx.append(random.sample(numbers, 8))

问题是代码非常慢。有没有办法避免 for 循环告诉函数只输出 1000 套,或者有某种解决方法? 我想只生成 8000 个随机数,但问题是在一组 8 个数字中不允许重复时,这是不可能的!

例子:

 randIdx=[]
 indexRange = range(0, 3)  
 for i in range(5):
     randIdx.append(random.sample(indexRange, 2))

[[0, 1], [2, 1], [2, 0], [1, 0], [2, 1]]

【问题讨论】:

  • 您当前的代码引发了异常,您能否展示一个较小输入所需输出的示例?例如range(5)numbers = 3
  • 抱歉,刚刚将范围从 iters 更改为 numbers..

标签: python python-3.x numpy random


【解决方案1】:

您可以为此使用numpy 库:

import numpy as np

arr = np.random.randint(0, 2000, (1000, 8))

# array([[1026,   46, 1620, ...,  534, 1098, 1406],
#        [1081, 1235,  484, ..., 1124,  841,    4],
#        [1189, 1505, 1943, ...,   55, 1547, 1936],
#        ..., 
#        [1242,  877, 1129, ...,  230, 1226, 1399],
#        [1134,  939,  969, ..., 1600,  288, 1479],
#        [ 492,    5,  545, ..., 1093, 1805, 1404]])

然后只为一个选择切片数组,例如arr[0] 会将第一行作为数组提供给您。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-04
    • 2016-08-07
    • 1970-01-01
    • 2011-11-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多