我如何正确地将多处理计算应用于此函数?

时间:2021-05-17 16:28:36

标签: python-3.x parallel-processing multiprocessing

我有以下函数计算三个邻接矩阵列表的编辑距离,我表示 ls_Adj1、ls_Adj2、ls_Adj3。我想要的最终输出是计算出的距离矩阵。

import numpy as np
import networkx as nx
import netcomp as nc

def editDist3DGraph(ls_Adj1,ls_Adj2,ls_Adj3):
    '''
     Compute the edit distances between 3D graphs
     use the maximum value as the distance between each pair of graphs
     
    '''
    N=len(ls_Adj1)
    DistMat=np.zeros(shape=(N,N),dtype='float64')
    for i in range(N-1):
        for j in range(i+1, N):
            A1=ls_Adj1[i]
            B1=ls_Adj2[i]
            C1=ls_Adj3[i]
            
            A2=ls_Adj1[j]
            B2=ls_Adj2[j]
            C2=ls_Adj3[j]
            
            DistA=nc.edit_distance(A1,A2)
            DistB=nc.edit_distance(B1,B2)
            DistC=nc.edit_distance(C1,C2)
            
            DistMat[i, j]=max(DistA, DistB, DistC)
    DistMat = DistMat + np.transpose(DistMat)
    return(DistMat)  

我尝试使用多处理包和 tqdm 优化此代码以提高运行速度。这是我的尝试:

import multiprocessing
from joblib import Parallel, delayed
from tqdm import tqdm

def smpEditDist_3D(lsAdj1, lsAdj2, lsAdj3):
    
    '''
     We do parallel computing on multiprocessing cores. 
    '''
    
    num_cores = multiprocessing.cpu_count()
    
    
    input1 = tqdm(lsAdj1)
    input2 = tqdm(lsAdj2)
    input3 = tqdm(lsAdj3)

    processed_list = Parallel(n_jobs=num_cores)(delayed(editDist3DGraph)(
        input1, input2, input3))
    return processed_list

但是,这会为我返回一个距离矩阵列表。我怎么可能解决这个问题?提前致谢!!

此外,这是我的 ls_Adj1、ls_Adj2 和 ls_Adj3 的链接。

ls_Adjs

0 个答案:

没有答案
相关问题