【问题标题】:Efficient way for generating N arrays of random numbers between different ranges在不同范围之间生成 N 个随机数数组的有效方法
【发布时间】:2017-06-18 04:07:54
【问题描述】:

我想用 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)
...

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

【问题讨论】:

  • 如何定义范围?至于100个不同的范围,一定有某种程序化的方式来定义吧?
  • 您是在脚本中重复生成这些数组,还是在开始时只生成一次。如果只是一次,则可能不值得担心效率,只需继续迭代 100 个范围即可。
  • @hpaulj 这些数组在脚本中生成一次
  • @Psidom 所有数组的每个元素都具有相同的大小和范围。不会有 N 个范围,只有 n 个范围。
  • 如何生成 (100,5) randint,并以不同方式缩放每一行?

标签: python python-2.7 numpy


【解决方案1】:

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

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

【讨论】:

  • 这就是为什么它们是变量,在代码中插入使 a 和 b 发生变化的任何内容,编辑代码并添加硬编码 a 和 b 值的方法(以防它们不是从函数返回的)
【解决方案2】:

另一种可能性。设置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 可能会产生明显的不同,但我以这种方式编写它是为了使其更易于阅读(和编写:))。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-31
    • 2011-10-20
    • 2015-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-13
    • 1970-01-01
    相关资源
    最近更新 更多