python-3.x - 如何正确地将多处理计算应用于此功能?
问题描述
我有以下函数计算三个邻接矩阵列表的编辑距离,我表示为 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 的链接。
解决方案
推荐阅读
- c# - 转换列表
到单个 SpannableString - html - 如何在不使用 span 的情况下将样式应用于内联元素
- python - 如何将二维数组分配给更大的二维切片?
- c++ - 链表合并排序的 C++ 实现在加入超过 1 个节点的子列表时失败
- r - 使用 tmap 缩放和裁剪地图
- javascript - 如何在不包装匿名函数的情况下为 jQuery 使用美元符号?
- java - 与 ImageIcon 相比,BufferedImage 非常慢
- mysql - 重新启动笔记本电脑后,我的mysql突然出现了这个问题
- flutter - 如何从 WebRTC Flutter 应用程序强制 CoTURN 长期凭据验证?
- amazon-elb - EC2 实例在重启后显示不正常