0

我试图为一个非常大的图(~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))

如果没有,你能帮我解决这个问题吗?

4

1 回答 1

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,否则可能会引发一些内存错误。

于 2021-03-06T15:41:03.050 回答