python - 距离矩阵的并行构造

标签 python performance parallel-processing distance hierarchical-clustering

我致力于对大量多维向量进行分层凝聚聚类,我注意到最大的瓶颈是距离矩阵的构建。此任务的简单实现如下(此处为 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 个处理器,则为不同范围的 i 创建 10 个不同的作业,然后连接结果。然而,这种“水平”解决方案似乎不太正确。此任务是否有任何其他并行算法(或现有库)?任何帮助将不胜感激。

最佳答案

看起来 scikit-learn 有一个名为 pairwise_distances 的并行版本的 pdist|

from sklearn.metrics.pairwise import pairwise_distances

D = pairwise_distances(X = v, metric = 'cosine', n_jobs = -1)

其中 n_jobs = -1 指定将使用所有 CPU。

关于python - 距离矩阵的并行构造,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11251148/

相关文章:

Matlab nchoosek问题

php - 创建 View 还是使用 innerjoins?

python - python中的多处理嵌套数值积分

python - Bokeh 图像绘图的较小范围填充

python - 递归检查奇数或偶数

performance - "for"循环在Matlab和Octave中的时间对比

multithreading - 强制MPI使用指定的编号。核心

c++ - 是否可以并行化这个 for 循环?

python - 如何使用python遍历传递给函数参数的列表?

python - 如何使用openpyxl删除Excel中的第一行