【问题标题】:Python Parallelize a Function with Multiple InputsPython 并行化具有多个输入的函数
【发布时间】:2016-11-04 17:07:41
【问题描述】:

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

【问题讨论】:

    标签: python dataframe parallel-processing ipython


    【解决方案1】:

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

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

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

    你可能想看看在 ipython 中使用 mpi4py。参见例如https://ipython.org/ipython-doc/3/parallel/parallel_mpi.html。这将使您能够非常轻松地开发和调试并行代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-05
      • 2019-02-02
      • 2017-02-18
      • 1970-01-01
      • 2018-10-17
      • 2011-05-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多