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
?
答案 0 :(得分:0)
如果函数仅依赖于给定切片中的数据,那么这很容易并行化。我会做以下事情:
1)将数据集拆分为N个集合,其中N是处理器的数量。这些集合应该足够重叠。
2)每个处理器在其自己的数据子集上计算数量。
您可能希望在ipython中使用mpi4py。请参阅示例https://ipython.org/ipython-doc/3/parallel/parallel_mpi.html。这样可以很容易地开发和调试并行代码。