从每个变量的给定范围创建N组变量组合

时间:2016-11-08 16:26:49

标签: python list simulation montecarlo

这可能是一个非常模糊的问题 - 我提前道歉。

y是a,b,c,d,e的函数。 a可以从1到130; b从0.5到1; c从3到10; d从0到1; e是1-d。

在python中有没有办法我可以从给定范围创建N(例如,10,000)组a,b,c,d和e?

2 个答案:

答案 0 :(得分:0)

itertools是一个很棒的库,用于创建类似的迭代器。在您的情况下,我们需要product。但是,您无法设置所需的点数。您将不得不以数学方式导出并将其转换为步骤(range()函数末尾的1)。

a = [i for i in range(1, 131, 1)]
b = [i/10 for i in range(5, 11,1)]
c = [i for i in range(3, 11, 1)]
d = [i/10 for i in range(0, 11, 1)]

from itertools import product

combs = product(a, b, c, d)
for i, x in enumerate(combs, 1):
    x = list(x)
    x.append(1-x[-1])
    print(i, x)  # example print: 52076 [99, 0.8, 9, 0.1, 0.9]

以上示例产生:130 * 6 * 8 * 11 = 68640组合

这些比你要求的要多,但你明白了。您还可以决定使用变量更精细地离散

我也假设a& c是整数变量..

答案 1 :(得分:0)

我假设你想要所有这些的浮点数。如果您希望int使用random.randint

from random import uniform

inputs = [[uniform(1,130), uniform(.5, 1), uniform(3,10), uniform(0,1)] for _ in range(N)]

for input_list in inputs:
    input_list.append(1-input_list[-1])
    a(*input_list)