Как оптимизировать следующую функцию в python? - PullRequest
0 голосов
/ 29 июня 2019

У меня есть функция, которая сейчас занимает от 15 до 20 минут. Я использую это несколько раз в алгоритме и в настоящее время алгоритм. непригоден из-за потраченного времени. Есть ли в любом случае следующая функция может быть оптимизирована:

def find_all():
    for x in range(4, 10):
        for y in range(4, 10):
            for z in range(4, 10):
                for z1 in range(4, 10):
                    for z2 in range(4, 10):
                        for xs in range(13 - x):
                            for ys in range(13 - y):
                                for zs in range(13 - z):
                                    for z1s in range(13 - z1):
                                        for z2s in range(13 - z2):
                                            a = np.zeros(12, int)
                                            a[xs:xs+x] += 1
                                            a[ys:ys+y] += 1
                                            a[zs:zs+z] += 1
                                            a[z1s:z1s+z] += 1
                                            a[z2s:z2s+z] += 1
                                        if 0 not in a:
                                            yield x, y, z,z1,z2s,xs, ys,zs,z1s,z2s,a

%time list(find_all())

По сути, я пытаюсь создать список, в котором нет нуля. Я попробовал приведенное ниже решение, но оно работает только для двух диапазонов, и у меня есть требование, где мне может понадобиться до 6 диапазонов Как создать каждую комбинацию данного шаблона в массиве numpy?

1 Ответ

0 голосов
/ 29 июня 2019

Используйте itertools.product во всех диапазонах, чтобы упростить создание значений индекса. Это уменьшит накладные расходы на кодирование.

Далее, обратите внимание, что у вас есть очень регулярная последовательность перекрывающихся диапазонов. Вы должны быть в состоянии получить минимальный интервальный охват, а не кропотливо пересчитывать его из каждой группы. Сначала проверьте, все ли элементы охвачены, прежде чем пройти процесс вычисления значений с помощью приращения.

Обратите внимание, что пять пар параметров полностью взаимозаменяемы. Вы можете уменьшить лот поиска, если перестанете тратить время на поиск эквивалентных решений.

Это заставляет вас двигаться?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...