l имеет следующую функцию, которая состоит из 30 вложенных циклов. Когда я запускаю свой скрипт, я получаю следующую ошибку:
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 убитый процесс at:
set_of_configurations=itertools.product(set_of_configurations_1,set_of_configurations_2)
Любой кий?
Спасибо