我正在做一个项目,我需要将一个Matlab程序翻译成Python,我很难弄清楚如何编写以下循环:
parfor i=1:numPointsEval
ftemp_pte(:,i) = feval(func_F,pointsToEval(:,i));
我不熟悉使用Python的并行性,到目前为止,我已经成功地编写了该代码的顺序版本(正在工作),以及使用ThreadPoolExecutor的循环版本,我很不确定是否正确使用了该版本。以下提供了两种代码:
def func_F(x):
f= np.zeros((1,2))
f[0,0]= x[0,0]
n= max(np.size(x,0), np.size(x,1))
g = 1 + 9* np.sum(x[1:n])/(n-1)
h = 1 - np.sqrt(f[0,0]/g)
f[0,1] = g * h
F= np.transpose(f)
return F
#sequential version
for i in range(0, numPointsEval):
ftemp_pte[:,i] = np.hstack(func_F(np.vstack(pointsToEval[:,i])))
#ThreadPoolExecutor version
def tempFtemp(ftemp_pte, func_F, i):
ftemp_pte[:,i] = np.hstack(func_F(np.vstack(pointsToEval[:,i])))
with concurrent.futures.ThreadPoolExecutor() as executor:
for i in range(0, numPointsEval):
executor.submit(tempFtemp, ftemp_pte, func_F, i)
因此,我有两个主要问题,非常感谢您的反馈:
1-我使用ThreadPoolExecutor的实现是否正确?我不确定我是否正确使用它,而且并行版本的执行时间高于顺序版本(尽管这可能是因为我的电脑只有2个逻辑内核和2个内核)
2-如何以类似的方式使用ProcessPoolExecutor?我无法显示该部分的代码,因为在过去的两天里,我一直在试图找出如何做,但我似乎无法理解它。我看到的每个示例和教程都只显示了1D数组的示例。变量ftemp_pte[:,i]
是我在这里遇到的最大问题,我在一些帖子中也看到,不建议使用hstack
和vstack
,但在本指令中,它们是防止维度不匹配的基础
如果您对这两种并行形式有任何帮助或反馈,我们将不胜感激
目前没有回答
相关问题 更多 >
编程相关推荐