Я должен запустить этот код для NT = 512. Можете ли вы, люди, помочь мне, как распараллелить эти три для цикла так, чтобы я получил исходный вывод. Это должно занять меньше времени
import numpy as np
nt=128
threed_full=[]
threed_real=[]
threed_img=[]
for i in range (nt):
for j in range(nt):
for k in range (nt):
threed=S3resp(t[k],(t[k]-ta[i]),(t[k]-tb[j]),tc,t_inc)
threed_full.append(threed)
threed_real.append(numpy.real(threed))
threed_img.append(numpy.imag(threed))
, где t,ta ,tb
- массив длины nt, а tc
- просто значение. когда nt=128
этот цикл занимает больше одного часа. S3 resp - это функция, которая определена в другом коде. Можете ли вы помочь мне сделать это быстрее. Я хочу запустить его для nt=512
. Не могли бы вы помочь мне найти другой способ найти тот же результат, что и здесь, с более быстрой шкалой времени. Спасибо.
Этот верхний является исходным кодом без распараллеливания.
from itertools import product
threed_real=[]
threed_img=[]
a_grid=range(32)
b_grid=range(32)
for i, j in product(a_grid,b_grid):
for k in range(nt):
threed=S3resp(t[k],(t[k]-ta[i]),(t[k]-tb[j]),tc,t_inc)
threed_real.append(numpy.real(threed))
threed_img.append(numpy.imag(threed))
numpy.savetxt("paralllel real.out",threed_real,fmt="%25.18f")
numpy.savetxt("parrele ima.out",threed_img,fmt="%25.18f")
С распараллеливанием, но я не получил никакого ответа.
import multiprocessing as mp
p = mp.Pool()
dim1, dim2, dim3 = 32, 32, 32
import itertools
input = ((t[k],(t[k]-ta[i]),(t[k]-tb[j]),tc,t_inc) for i,j,k in itertools.combinations_with_replacement(range(dim3), 3) if i < dim1 and j < dim2)
results = p.map(S3resp, input)
p.close()
p.join()
Это такжея пытался, но все равно провал