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