在不同范围之间生成N个随机数阵列的有效方法

时间:2017-06-17 19:27:23

标签: python python-2.7 numpy

我想用numpy生成N个固定长度为n的随机数的数组,但数组的数字必须在不同的范围之间变化。

因此,例如,我想生成N = 100个大小为n = 5的数组,每个数组的数字必须介于:

  • 0到10之间的第一个数字
  • 20到100之间的第二个数字

依旧......

我想到的第一个想法就是:

first=np.random.randint(0,11, 100) 
second=np.random.randint(20,101, 100)
...

然后我应该嵌套它们,有更有效的方法吗?

2 个答案:

答案 0 :(得分:0)

我只是将它们放在另一个数组中并通过它们的索引迭代它们

from np.random import randint
array_holder = [[] for i in range(N)] # Get N arrays in a holder
ab_holder = [[a1, b1], [a2, b2]]
for i in range(len(array_holder)): # You iterate over each array
    [a, b] = [ab_holder[i][0], ab_holder[i][1]]
    for j in range(size): # Size is the ammount of elements you want in each array
        array_holder[i].append(randint(a, b)) # Where a is your base and b ends the range

答案 1 :(得分:0)

另一种可能性。设置ranges表示每个数组的各个部分的范围必须是多少以及有多少。 size是要在数组的每个单独部分中采样的值的数量。 N是蒙特卡罗样本的大小。结果是arrays

import numpy as np

ranges = [ (0, 10), (20, 100) ]
size = 5
N = 100

arrays = [ ]
for n in range(N):
    one_array = []
    for r in ranges:
        chunk = np.random.randint(*r, size=size)
        one_array.append(chunk)
    arrays.append(one_array)

使用numpy的append代替Python可能会产生明显的不同,但我已经用这种方式编写了这篇文章,以便更容易阅读(和写作) :))