まず、お読みいただき、返信に時間を割いていただきありがとうございます。
第二に、質問:
PxN 行列 X があります。ここで、P は 10^6 のオーダーであり、N は 10^3 のオーダーです。したがって、X は比較的大きく、スパースではありません。X の各行が N 次元の標本であるとしましょう。これらの P サンプル間のペアごとの距離の PxP 行列を作成したいと考えています。また、ヘリンジャー距離に興味があるとしましょう。
これまでのところ、スパース dok 行列に依存しています。
def hellinger_distance(X):
P = X.shape[0]
H1 = sp.sparse.dok_matrix((P, P))
for i in xrange(P):
if i%100 == 0:
print i
x1 = X[i]
X2 = X[i:P]
h = np.sqrt(((np.sqrt(x1) - np.sqrt(X2))**2).sum(1)) / math.sqrt(2)
H1[i, i:P] = h
H = H1 + H1.T
return H
これは超遅いです。これを行うより効率的な方法はありますか?どんな助けでも大歓迎です。