Почему слияние двух циклов не дает тот же результат, что и вложенный цикл? - PullRequest
0 голосов
/ 07 февраля 2019

(Использование python 2)

Мне предложили соединить два моих цикла вместе, чтобы ускорить мой код, который занимал слишком много времени.

Итак, вместо этого:

for timestep in range(0,100): 
     for xn in xrange(0,npoints):
          for step in xrange(0,npoints):


               fx=somefunction[xn]+somefunction[step]

               print fx

Я использовал это:

for timestep in xrange(0,100):
     for step, xn in itertools.product([0,npoints-1],[0,npoints-1]):


          fx=somefunction[xn]+somefunction[step]

          print fx

, но я получил два совершенно разных результата, когда распечатал свою функцию, fx.

Для вложенного цикла (первый блок кода) я получил список из 999 чисел (правильной длины).

Однако, когда я попытался объединить два цикла (второй блок кода), я получил только четыре из 999 номеров, которые я должен был получить в своем списке.

Я неправильно объединяю цикл for?Есть ли другой способ объединить вложенный цикл for, который все равно поможет ускорить мой код?

1 Ответ

0 голосов
/ 07 февраля 2019

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

for step, xn in itertools.product(xrange(0, npoints), repeat=2):

С product([0,n_points-1], [0,n_points-1]) вы выполняете итерации только по кортежам: (0,0), (0,n_points-1), (n_points-1,0) и (n_points-1,n_points-1), а не O (n_points**2) различных нужных вам кортежей.

...