我有一个庞大的数据集,我必须计算它的每一个点的一系列属性。我的代码非常慢,我想让它更快地并行化do循环。我希望每个处理器为我的数据的有限子样本计算“一系列属性”,然后将所有属性连接在一个数组中。 我会尝试解释我必须要做的一个例子。需要帮助来并行python循环
比方说,我的数据集是数组x
:
x = linspace(0,20,10000)
的“财产”我希望得到的是,例如,平方根x
:
prop=[]
for i in arange(0,len(x)):
prop.append(sqrt(x[i]))
问题我如何平行上面的循环?假设我有4个处理器,并且我希望每个处理器计算10000/4 = 2500点的sqrt。
我试着看过一些Python模块,如multiprocessing
和mpi4py
,但从指南我找不到这样一个简单的问题的答案。
编辑
我要谢谢大家的宝贵意见和链接,您为我提供。不过,我想澄清一下我的问题。无论如何,我对sqrt
功能不感兴趣。 我正在循环中执行一系列操作。我完全知道循环是坏的,矢量操作总是比他们更可取,但在这种情况下,我真的必须做一个循环。我不会详细讨论我的问题,因为这会给这个问题增加不必要的复杂性。 我想分割我的循环,以便每个处理器都能完成它的一部分,这意味着我可以用每个循环的1/40来运行我的代码40次,并且合并结果,但这将是愚蠢的。 这是一个简单的例子
for i in arange(0,len(x)):
# do some complicated stuff
我要的是用40级的CPU来做到这一点:
那是可能的,或者不使用Python?
对于这个特殊的例子,你会比使用'numpy.sqrt(x)'而不是Python循环的单纯因子4快得多。你的真实任务可能也是如此。 –
感谢您的回答,但是我的真正任务比执行sqrt更复杂。我只是想知道为什么我找不到任何简单的python循环并行化的例子。 – Brian
根据我的经验,矢量化是在99%的情况下加速数值Python循环的方法,即使它们更复杂。描述你的真实功能,我可以告诉你如何进行矢量化。 –