疎行列のリストが与えられた場合、行列の各列 (または行) 間のコサイン類似度を計算する最良の方法は何ですか? n-choose-two を 2 回繰り返すのは避けたいと思います。
入力行列は次のとおりです。
A=
[0 1 0 0 1
0 0 1 1 1
1 1 0 1 0]
スパース表現は次のとおりです。
A =
0, 1
0, 4
1, 2
1, 3
1, 4
2, 0
2, 1
2, 3
Python では、行列入力形式を使用するのは簡単です。
import numpy as np
from sklearn.metrics import pairwise_distances
from scipy.spatial.distance import cosine
A = np.array(
[[0, 1, 0, 0, 1],
[0, 0, 1, 1, 1],
[1, 1, 0, 1, 0]])
dist_out = 1-pairwise_distances(A, metric="cosine")
dist_out
与えます:
array([[ 1. , 0.40824829, 0.40824829],
[ 0.40824829, 1. , 0.33333333],
[ 0.40824829, 0.33333333, 1. ]])
完全な行列の入力では問題ありませんが、(行列のサイズとスパース性のため) スパース表現から始めたいと思います。これをどのように達成するのが最善かについてのアイデアはありますか? 前もって感謝します。