2016-11-08 67 views
-2

这可能是一个非常模糊的问题 - 我提前道歉。从每个变量的给定范围创建N组变量组合

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?

+1

'a'&'c'的类型? – MMF

+1

看看'itertools'。 – Phlya

+0

你能否提供一些示例输入和输出.. – Aaron

回答

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

'e'取决于'd'的*传递*值 - 你不应该事先计算它。 – brianpck

+0

好的。感谢那。由于迭代器产生无法编辑的元组,因此该修复实际上会破坏效率。 –

+0

这太棒了。非常感谢您的帮助@ Ev.Kounis。 – DPdl

0

我假设你想浮点数所有这些。如果你想要int s使用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)