【问题标题】:Generate K random numpy arrays given N variables and ranges给定 N 个变量和范围,生成 K 个随机 numpy 数组
【发布时间】:2021-09-09 13:44:50
【问题描述】:

我有 N 个变量(定义 N 维空间),它们的定义范围(正态或均匀分布在给定范围内):

每个变量都由一个包含其可能整数值的列表定义。

v1_range = [1, 2, 3, 4, 5, 6]
v2_range = [10, 20, 30, 40, 50, 60]
v3_range = [100, 200, 300, 400, 500]
v4_range = [15, 16, 17, 18]

我想生成 K 个列表(numpy 数组/向量..),每个列表包含给定范围内的一个随机数,没有重复项。 所以每个列表中的第 i 个元素是从第 i 个范围列表中选择的。

示例(K = 6,来自给定范围):

output = [
    [1, 20, 300, 15],
    [5, 10, 200, 15],
    [3, 60, 100, 18],
    [4, 30, 200, 16],
    [4, 40, 100, 17],
    [2, 30, 400, 15],
]

最好的方法是什么,使用numpy.random()scipy 假设N 维空间可能非常大(~13 个范围列表,每个包含~20 个值)并且不允许重复?

[编辑] 范围列表中的重复条目很好,但我不想在结果列表列表中有两个重复/完全相同的列表,例如:

索引 0、2 重复...

res = [[  4,  40, 400,  18],
       [  4,  60, 400,  17],
       [  4,  40, 400,  18]]

【问题讨论】:

    标签: python arrays numpy scipy distribution


    【解决方案1】:

    简单的迭代会起作用吗?我认为对于 13 个列表 x 20 个值,它会工作得很好。

    import random
    
    d = {
    "v1_range" : [1, 2, 3, 4, 5, 6],
    "v2_range" : [10, 20, 30, 40, 50, 60],
    "v3_range" : [100, 200, 300, 400, 500],
    "v4_range" : [15, 16, 17, 18]
    }
    
    def give(k):
        out = [[] for i in range(k)]
        for l in out:
            for i in d.keys():
                l.append(random.choice(d[i]))
        return out
    

    例如:

    >>> give(6)
    [[5, 50, 500, 15], [1, 60, 400, 16], [5, 20, 200, 15], [1, 40, 400, 18], [2, 20, 100, 15], [6, 20, 400, 16]]
    

    或者,使用 numpy

    >>> import numpy as np
    >>> np.array(give(6))
    array([[  4,  40, 400,  18],
           [  4,  60, 400,  17],
           [  5,  20, 400,  17],
           [  4,  10, 300,  16],
           [  5,  10, 300,  16],
           [  4,  30, 500,  18]])
    

    【讨论】:

    • 谢谢!我认为这在大多数情况下都可以,但这是否也可以处理重复项?
    • @MohammedErow 您能否详细说明重复项?您的列表之间是否存在重复条目?
    猜你喜欢
    • 1970-01-01
    • 2018-12-17
    • 2015-05-25
    • 2018-12-25
    • 1970-01-01
    • 2017-03-06
    • 2014-05-15
    • 2014-02-25
    • 1970-01-01
    相关资源
    最近更新 更多