我在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()
答案 0 :(得分:0)
这是一个自我解决方案,它不是最有效的解决方案,但是完成了工作。我使用了一些相关的SO问题的想法。这里的关键是 imap ,它可以降低内存消耗并在Linux上运行代码。
$extensions = array('png', 'gif', 'jpg', 'jpeg','PNG', 'GIF', 'JPG', 'JPEG');
这会按照最初的目的填充 dma 数组。我相信这可以通过直接将结果写入函数中的数组来进一步改进,而不是在列表中收集结果。