Joblib并行写入"共享" numpy稀疏矩阵

时间:2015-06-21 14:55:29

标签: python numpy scipy networkx joblib

我试图计算一个非常大的图(~1m节点)的每个节点的共享邻居数。使用Joblib我试图并行运行它。但我担心并行写入稀疏矩阵,它应该保留所有数据。这段代码会产生一致的结果吗?

vNum = 1259084
NN_Matrix = csc_matrix((vNum, vNum), dtype=np.int8)

def nn_calc_parallel(node_id = None):
    i, j = np.unravel_index(node_id, (1259084, 1259084))
    NN_Matrix[i, j] = len(np.intersect1d(nx.neighbors(G, i), nx.neighbors(G,j)))

num_cores = multiprocessing.cpu_count()
result = Parallel(n_jobs=num_cores)(delayed(nn_calc_parallel)(i) for i in xrange(vNum**2))

如果没有,你能帮我解决一下吗?

1 个答案:

答案 0 :(得分:0)

我需要做同样的工作,就我而言,将矩阵合并成一个矩阵就可以了,你可以这样做:

from scipy.sparse import vstack
matrixes = Parallel(n_jobs=-3)(delayed(nn_calc_parallel)(x) for x in documents) 
matrix = vstack(matrixes)

Njob-3 表示除 2 以外的所有 CPU,否则可能会抛出一些内存错误。