itertools.product (np.arange (0.0, 1.1, 0.1), repeat = 30) прерванный процесс - PullRequest
0 голосов
/ 27 октября 2018

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)

Любой кий?

Спасибо

1 Ответ

0 голосов
/ 27 октября 2018

Опираясь на указание, данное @Martjin Pieters, вот решение.Все дело в использовании isslice:

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