我对大量多维向量进行层次凝聚聚类,我注意到最大的瓶颈是距离矩阵的构造。此任务的简单实现如下(此处使用 Python):
''' v = an array (N,d), where rows are the observations
and columns the dimensions'''
def create_dist_matrix(v):
N = v.shape[0]
D = np.zeros((N,N))
for i in range(N):
for j in range(i+1):
D[i,j] = cosine(v[i,:],v[j,:]) # scipy.spatial.distance.cosine()
return D
我想知道向这个例程添加一些并行性的最佳方法是什么。一种简单的方法是中断外部循环并将其分配给多个作业,例如如果您有 10 个处理器,请为不同的范围创建 10 个不同的作业i
然后连接结果。然而,这种“横向”解决方案似乎不太正确。是否有其他并行算法(或现有库)可以完成此任务?任何帮助将不胜感激。
好像scikit-learn
有一个名为 pdist 的并行版本成对距离 https://scikit-learn.org/stable/modules/generated/sklearn.metrics.pairwise_distances.html
from sklearn.metrics.pairwise import pairwise_distances
D = pairwise_distances(X = v, metric = 'cosine', n_jobs = -1)
where n_jobs = -1
指定将使用所有 CPU。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)