私は大量の多次元ベクトルに対する階層的凝集クラスタリングに取り組んでいますが、最大のボトルネックは距離行列の構築であることに気付きました。このタスクの単純な実装は次のとおりです (ここでは 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
、結果を連結します。ただし、この「水平」ソリューションはまったく正しくないようです。このタスク用の他の並列アルゴリズム (または既存のライブラリ) はありますか? どんな助けでも大歓迎です。