给定 N 个变量和范围,生成 K 个随机 numpy 数组

问题描述

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

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

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select id="testSelect">
</select>

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

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

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]

最好的方法是什么,使用 output = [ [1,15],[5,10,[3,60,100,18],[4,16],17],[2,] numpy.random() 假设 N 维空间可能非常大(约 13 个范围列表,每个包含约 20 个值)并且没有重复项允许吗?

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

索引 0、2 重复...

scipy

解决方法

简单的迭代会起作用吗?我认为对于 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,500,15],[1,60,16],[5,18],[2,100,[6,16]]

或者,使用 numpy

>>> import numpy as np
>>> np.array(give(6))
array([[  4,[  4,17],[  5,10,18]])