Dato un elenco di matrice sparse, qual è il modo migliore per calcolare la somiglianza del coseno tra ciascuna delle colonne (o righe) nella matrice? Preferirei non iterare n-scegliere-due volte.Qual è il modo più veloce in Python per calcolare la similarità del coseno dato i dati sparsi della matrice?
Di 'la matrice di ingresso è:
A=
[0 1 0 0 1
0 0 1 1 1
1 1 0 1 0]
La rappresentazione sparsa è:
A =
0, 1
0, 4
1, 2
1, 3
1, 4
2, 0
2, 1
2, 3
In Python, è semplice per lavorare con il formato matrice ingresso:
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
Gives:
array([[ 1. , 0.40824829, 0.40824829],
[ 0.40824829, 1. , 0.33333333],
[ 0.40824829, 0.33333333, 1. ]])
Questo va bene per un input full-matrix, ma voglio davvero iniziare con la rappresentazione sparsa (a causa delle dimensioni e della scarsità della mia matrice). Qualche idea su come questo potrebbe essere realizzato al meglio? Grazie in anticipo.
non dovrebbe la prima riga di un radi essere '0, 1'? – seth
Quanto è grande A, in genere? – seth
Seth sì, l'ho modificato con la tua correzione. Grazie. La dimensione è attualmente tra le decine di migliaia di voci diverse da zero, ma mi piacerebbe gestire 2-3 ordini di grandezza maggiori. – zbinsd