itertools.product(np.arange(0.0,1.1,0.1),repeat=30)杀死进程



l有以下函数,它由30个嵌套的for循环组成。当我运行脚本时,会出现以下错误:SyntaxError:静态嵌套块过多

函数的作用是什么

计算一组由31个值(x1,..,x31(组成的配置,这些值的范围从0到1,步长为0.1,使得这31个值的总和等于1.0。

我试过什么

def compute_config():
config = []
for b1 in np.arange(0.0, 1.1, 0.1):
for b2 in np.arange(0.0, 1.1, 0.1):
for b3 in np.arange(0.0, 1.1, 0.1):
for b4 in np.arange(0.0, 1.1, 0.1):
for b5 in np.arange(0.0, 1.1, 0.1):
for b6 in np.arange(0.0, 1.1, 0.1):
for b7 in np.arange(0.0, 1.1, 0.1):
for b8 in np.arange(0.0, 1.1, 0.1):
for b9 in np.arange(0.0, 1.1, 0.1):
for b10 in np.arange(0.0, 1.1, 0.1):
for b11 in np.arange(0.0, 1.1, 0.1):
for b12 in np.arange(0.0, 1.1, 0.1):
for b13 in np.arange(0.0, 1.1, 0.1):
for b14 in np.arange(0.0, 1.1, 0.1):
for b15 in np.arange(0.0, 1.1, 0.1):
for b16 in np.arange(0.0, 1.1, 0.1):
for b17 in np.arange(0.0, 1.1, 0.1):
  for b18 in np.arange(0.0, 1.1, 0.1):
      for b19 in np.arange(0.0, 1.1, 0.1):
          for b20 in np.arange(0.0, 1.1, 0.1):
              for b21 in np.arange(0.0, 1.1, 0.1):
                  for b22 in np.arange(0.0, 1.1,0.1):
                      for b23 in np.arange(0.0,1.1, 0.1):
                          for b24 in np.arange(0.0, 1.1, 0.1):
                              for b25 in np.arange(0.0, 1.1,  0.1):
                                  for b26 in np.arange(0.0,1.1,0.1):
                                      for b27 in np.arange(0.0,1.1,0.1):
                                          for b28 in np.arange(0.0,1.1,0.1):
                                              for b29 in np.arange(0.0,1.1,0.1):
                                                  for b30 in np.arange(0.0, 1.1,0.1):
                                                      b31 = 1 - np.sum([b1, b2, b3, b4, b5, b6, b7,b8, b9, b10, b11, b12,b13,b14,b15,b16, b17, b18, b19, b20, b21, b22,b23, b24, b25, b26, b27,b28,b29,b30])
                                                      if (b31 >= 0.0):
                                                          x = [b1, b2, b3, b4, b5, b6, b7,b8, b9, b10, b11, b12,b13,b14,b15,b16, b17, b18, b19, b20, b21, b22,b23, b24, b25, b26, b27,b28,b29,b30,b31]
                                                          if (np.sum(x) == 1.0) or (np.sum(x) == 1):
                                                              config.append([x])
config=np.asanyarray(config)
config=np.squeeze(config)

返回配置

编辑:

以下是@Martijn Pieters的回答:

set_of_configurations=itertools.product(np.arange(0.0, 1.1, 0.1), repeat=30)

我想通过说我只需要2000个配置来修正预算。

有什么方法可以做到以下几点吗:

set_of_configurations=itertools.product(np.arange(0.0, 1.1, 0.1), repeat=30,budget=2000)
set_of_configurations = np.asarray(list(set_of_configurations))
set_of_configurations.shape
(2000,30)

因为有30个循环,我们得到了数百万的配置,而这个过程就被扼杀了。

我试过什么

set_of_configurations_1=itertools.product(np.arange(0.0, 1.1, 0.1), repeat=15)
set_of_configurations_2=itertools.product(np.arange(0.0, 1.1, 0.1), repeat=15)
set_of_configurations=itertools.product(set_of_configurations_1,set_of_configurations_2)

然而,我在上得到了l终止进程

set_of_configurations=itertools.product(set_of_configurations_1,set_of_configurations_2)

有线索吗?

谢谢

根据@Martjin Pieters给出的指示,以下是解决方案。这一切都是关于使用isslice:

set_of_configurations=itertools.islice(itertools.product(np.arange(0.0, 1.1, 0.1), repeat=30),0,10000)

最新更新