Итерация для цикла? - PullRequest
       7

Итерация для цикла?

0 голосов
/ 08 января 2019

Возможно ли в Python повторять цикл for и как выглядит код для такой конструкции?

Для ясности, вот что я имею в виду, повторяя цикл for:

for i in range(100):
     for j in range(100):
         for k in range(100):
...
             for n in range(100):
                  print(i+j+k+...+n)

А вот конкретный пример, который я хотел бы видеть упрощенным:

data0=numpy.random.normal(0,1,100)
data1=numpy.random.normal(0,1,100)
data2=numpy.random.normal(0,1,100)
A=numpy.zeros(100*100*100)
for i in range(len(data0)):
    for j in range(len(data1)):
        for k in range(len(data2)):
             A[i*len(data0)*len(data1)+j*len(data0)+k]=data[i]+data[j]+data[k]

Возможно ли это?

1 Ответ

0 голосов
/ 08 января 2019

Похоже, вы запрашиваете оптимизацию, известную как Loop Unrolling . Для этого вам нужно взглянуть на оптимизацию (возможно, детерминистически) с самого нижнего вложенного уровня вверх.

В этом случае это невозможно. В общем, этот цикл сводится к установке каждого элемента тензора A[i,j,k] = d0[i]+d1[j]+d2[k]; в некотором смысле, это операция «один ко многим».

Если, однако, в векторах данных data0, data1 и data2 имеются регулярные шаблоны, вы можете воспользоваться несколькими эвристиками, которые могут помочь. Однако в этом случае вы задали для них случайные векторы, поэтому никакие базовые предположения об организации или структуре бесполезны.

...