Numpy 数组在多进程中的高效共享

问题描述 投票:0回答:0

我在脚本中加载/组装了两个多维 Numpy 数组,分别命名为

stacked
window
。每个数组的大小如下:

stacked
: (1228, 2606, 26)

window
: (1228, 2606, 8, 2)

目标是对多维数组中的每个i,j点进行统计分析,其中:

  1. window
    i,j是8个i,j点的子集合
  2. 这八个i,j点用于提取整个
    stacked
    数组的值,并将它们组装成一个列表
  3. 然后由scipy在此列表上进行统计分析,然后准备使用结果

此脚本部分如下:

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 以更快的速度进行统计分析?

python numpy parallel-processing multiprocessing numpy-ndarray
© www.soinside.com 2019 - 2024. All rights reserved.