我有以下函数计算三个邻接矩阵列表的编辑距离,我表示 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 的链接。