我在脚本中加载/组装了两个多维 Numpy 数组,分别命名为
stacked
和 window
。每个数组的大小如下:
stacked
: (1228, 2606, 26)
window
: (1228, 2606, 8, 2)
目标是对多维数组中的每个i,j点进行统计分析,其中:
window
的i,j是8个i,j点的子集合
stacked
数组的值,并将它们组装成一个列表此脚本部分如下:
def statagg(queue, startrng, endrng):
for stepone in range(startrng,endrng,1):
for steptwo in range(0,2606,1):
selection = window[stepone][steptwo]
piece = stacked[selection[:,0], selection[:,1]].tolist()
piece = [j for i in piece for j in i]
piece = [(i * 0.0393701) for i in piece]
piece = [0 if math.isnan(i) else i for i in piece]
param = sci.stats.gamma.fit(piece)
x = np.linspace(0, max(piece), 500)
cdf = sci.stats.gamma.cdf(x, *param)
def parallelstats():
processes = []
q = mpr.Queue()
for step in range(600,701,1):
pro = mpr.Process(target=statagg, args=(q, step, step + 1))
processes.extend([pro])
pro.start()
for p in processes:
p.join()
我已选择使用 100 行的块来测试此过程,并正在使用 Multiprocess 启动
statagg
的并行过程。在执行时,我注意到这些并行进程总共消耗 ~8.5-9.0 GB 的 RAM,考虑到 stacked
和 window
已经在并行执行任务的函数之外声明一次,这似乎异常高。每个列表中的条目总共只有 200-210,我也预计这会消耗最少的内存。
我可以采取什么步骤使这个过程在内存中更有效率,这样我就可以用 Scipy 以更快的速度进行统计分析?