Параллельное построение матрицы расстояний

Я работаю над иерархической агломеративной кластеризацией большого количества многомерных векторов и заметил, что самым большим узким местом является построение матрицы расстояний. Наивная реализация этой задачи следующая (здесь на 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, а затем объедините результаты. Однако это «горизонтальное» решение кажется не совсем правильным. Существуют ли другие параллельные алгоритмы (или существующие библиотеки )для этой задачи? Любая помощь будет высоко ценится.

11
задан dkar 28 June 2012 в 18:56
поделиться