我试图计算一个非常大的图(~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))
如果没有,你能帮我解决一下吗?
答案 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,否则可能会抛出一些内存错误。