Быстрый способ реализовать цикл - PullRequest
0 голосов
/ 17 декабря 2018

Я пытаюсь вычислить суммирование в Джулии, используя следующий цикл:

  for (k_j,kk) = enumerate(k)
       value=0
       for (s_j,ss) = enumerate(s), (z_j,zz) = enumerate(z), (w_j,ww) = enumerate(w)
                    value=value+V₀[w_j,z_j,k_j,s_j]*H[s_i,s_j]*mat[w_j,w_i,z_j,z_i]*G[z_i,z_j]
        end
  end

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

Любое предложение приветствуется, спасибо

1 Ответ

0 голосов
/ 17 декабря 2018

Я решил что-то вроде этого

     y=gridmake(1:ssize,1:zsize,1:wsize)
      ysize=ssize*zsize*wsize
      for (k_j,kk) = enumerate(k)
           # value=0
           # for (s_j,ss) = enumerate(s), (z_j,zz) = enumerate(z), (w_j,ww) = enumerate(w)
           #              value=value+V₀[w_j,z_j,k_j,s_j]*H[s_i,s_j]*mat[w_j,w_i,z_j,z_i]*G[z_i,z_j]
           #  end
            F[k_j]=(mapreduce(y_i -> V₀[y[y_i,3],y[y_i,2],k_j,y[y_i,1]]*H[s_i,y[y_i,1]]*mat[y[y_i,3],w_i,y[y_i,2],z_i]*G[z_i,y[y_i,2]], + ,1:ysize))
      end

В любом случае, я открыт для более эффективных предложений

...