Python使用多个输入并行化函数

时间:2016-11-04 17:07:41

标签: python dataframe parallel-processing ipython

python新手。使用IPython。

我想用滚动窗口对pandas数据帧进行一些计算。这个过程如下:

def calculate_avg_ret_t(return_matrix, rolling_window, t):
    ret_t = return_matrix.iloc[ np.arange((t-rolling_window+1),t+1,1), ]
    avg_ret_t = ret_t.mean().mean()  # much more complicated in reality
    return avg_ret_t

return_matrix = pd.DataFrame( np.random.randn(10000, 10000) )
rolling_window = 21

avg_ret_ts = []
for t in np.arange(rolling_window-1,10001,1):
    %time avg_ret_t = calculate_avg_ret_t(return_matrix, rolling_window, t)
    avg_ret_ts.append(avg_ret_t)

在每个for循环中执行的实际函数要复杂得多且耗时,因此需要并行化。这个过程可以平行化,如果是这样,那么用户最友好的模块是什么?

我意识到潜在的问题是函数必须在每个循环中调用巨大的输入return_matrix。我是否应首先将该矩阵转换为R-list类似对象,具体取决于rolling_window

1 个答案:

答案 0 :(得分:0)

如果函数仅依赖于给定切片中的数据,那么这很容易并行化。我会做以下事情:

1)将数据集拆分为N个集合,其中N是处理器的数量。这些集合应该足够重叠。

2)每个处理器在其自己的数据子集上计算数量。

您可能希望在ipython中使用mpi4py。请参阅示例https://ipython.org/ipython-doc/3/parallel/parallel_mpi.html。这样可以很容易地开发和调试并行代码。