疎な行列のリストがある場合、行列の各列(または行)間のコサインの類似度を計算する最良の方法は何ですか?むしろ、n-chooseを2回反復しないでください。スパース行列データを与えたときのコサイン類似度を計算するPythonの中で最も速い方法は何ですか?
A=
[0 1 0 0 1
0 0 1 1 1
1 1 0 1 0]
スパース表現である:Pythonで
A =
0, 1
0, 4
1, 2
1, 3
1, 4
2, 0
2, 1
2, 3
、それがマトリックス入力フォーマットで動作するように簡単です:
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. ]])
これはフル・マトリックス入力の場合には問題ありませんが、実際には(マトリクスのサイズと希薄さのため)疎な表現から始めたいと考えています。これがどのようにして最高の成果を収めることができるかについてのアイディア前もって感謝します。
によって連結されていますか? – seth
Aはどれくらいの大きさですか? – seth
セスはい、私はあなたの修正でそれを編集しました。ありがとう。サイズは現在、数千の非ゼロ項目に入っていますが、私は2〜3桁の大きさを扱いたいと思います。 – zbinsd