Я писал программу для грубой силы, проверяя последовательность чисел, чтобы искать эйлеровые кирпичи, но метод, который я придумал, включает тройной цикл. Поскольку вложенные петли Python заведомо медленны, мне было интересно, есть ли лучший способ использовать numpy для создания массива значений, которые мне нужны.Удаление вложенных циклов в numpy
#x=max side length of brick. User Input.
for t in range(3,x):
a=[];b=[];c=[];
for u in range(2,t):
for v in range(1,u):
a.append(t)
b.append(u)
c.append(v)
a=np.array(a)
b=np.array(b)
c=np.array(c)
...
Есть ли лучший способ генерировать значения массива af, используя команды numpy?
Спасибо.
Пример: Если х = 10, при Т = 3 Я хочу получить:
a=[3]
b=[2]
c=[1]
в первый раз через петлю. После этого, когда Т = 4:
a=[4, 4, 4]
b=[2, 3, 3]
c=[1, 1, 2]
В третий раз (т = 5) Я хочу:
a=[5, 5, 5, 5, 5, 5]
b=[2, 3, 3, 4, 4, 4]
c=[1, 1, 2, 1, 2, 3]
и так далее, вплоть до максимальных длин боковых около 5000 или около того.
EDIT: Решение
a=array(3)
b=array(2)
c=array(1)
for i in range(4,x): #Removing the (3,2,1) check from code does not affect results.
foo=arange(1,i-1)
foo2=empty(len(foo))
foo2.fill(i-1)
c=hstack((c,foo))
b=hstack((b,foo2))
a=empty(len(b))
a.fill(i)
...
быстрее работает во много раз. Спасибо всем.
Не могли бы вы опубликовать пример входных значений и желаемых результатов? Это может помочь найти правильное выражение. –
Петли вложенные 3 уровня глубоко медленны, период - не только в Python. –