我有一个庞大的数据集,我必须为它的每个点计算一系列属性。我的代码真的很慢,我想让它以某种方式更快地并行化 do 循环。我希望每个处理器为我的数据的有限子样本计算“一系列属性”,然后将所有属性连接到一个数组中。我将尝试用一个例子来解释我必须做什么。
假设我的数据集是数组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
功能不感兴趣。我正在一个循环中执行一系列操作。我完全知道循环是不好的,矢量运算总是比它们更可取,但在这种情况下,我真的必须做一个循环。我不会详细介绍我的问题,因为这会给这个问题增加不必要的复杂性。我想拆分我的循环,以便每个处理器执行它的一部分,这意味着我可以运行我的代码 40 次,每次循环的 1/40 和合并结果,但这将是愚蠢的。这是一个简短的例子
for i in arange(0,len(x)):
# do some complicated stuff
我想要的是使用 40 cpu 来做到这一点:
for npcu in arange(0,40):
for i in arange(len(x)/40*ncpu,len(x)/40*(ncpu+1)):
# do some complicated stuff
用python可能吗?