我有一个二维数组,它产生一个巨大的(> 300GB)组合列表,所以我想对 itertools.combinations 生成的迭代器进行惰性迭代并并行化这个操作。问题是我需要过滤输出,而 Multiprocessing 不支持。我现有的解决方法需要将组合列表加载到内存中,由于列表的大小,这也不起作用。
n_nodes = np.random.randn(10, 100)
cutoff=0.3
def node_combinations(nodes):
return itertools.combinations(list(range(len(nodes))), 2)
def pfilter(func, candidates):
return np.asarray([c for c, keep in zip(candidates, pool.map(func, candidates)) if keep])
def pearsonr(xy: tuple):
correlation_coefficient = scipy.stats.pearsonr(n_nodes[xy[0]], n_nodes[xy[1]])[0]
if correlation_coefficient >= cutoff:
return True
else:
return False
edgelist = pfilter(pearsonr, node_combinations(n_nodes))
我正在寻找一种使用带过滤器而不是映射的多处理对大型迭代器进行惰性评估的方法。
犯罪嫌疑人X
Cats萌萌
相关分类