使用多处理模块更新numpy数组

时间:2016-05-03 22:36:43

标签: python numpy multiprocessing

我在n-gram集列表上有一个简单的Jaccard,如相似度计算,如下所示。使用相对较小的列表可以很好地执行此代码,但是当列表大小变大(例如10k或更大)时,内存使用开始成为一个问题。如果我可以在相似度计算函数中填充Numpy零分配数组,而不是将结果附加到列表中,则可能会消除此内存问题。

在数组中获得结果的最佳方法是什么?感谢。

def myfunc3(idx):
    mylist = []
    for jj in range(idx+1,len_lines):
        aa = setng[idx].intersection(setng[jj])
        bb = len(aa) / max(lg[idx],lg[jj])
        mylist.append(bb)
    return mylist

if __name__ == '__main__':
    pool = Pool(processes=4)
    myres = pool.map(myfunc3, range(len(lines)-1))
    pool.close()

1 个答案:

答案 0 :(得分:0)

这是一个自我解决方案,它不是最有效的解决方案,但是完成了工作。我使用了一些相关的SO问题的想法。这里的关键是 imap ,它可以降低内存消耗并在Linux上运行代码。

$extensions = array('png', 'gif', 'jpg', 'jpeg','PNG', 'GIF', 'JPG', 'JPEG');

这会按照最初的目的填充 dma 数组。我相信这可以通过直接将结果写入函数中的数组来进一步改进,而不是在列表中收集结果。