¿Cuál es la forma más rápida en Python para calcular la similitud de coseno dados los datos de matriz dispersos?

Dada una lista de matrices dispersas, ¿cuál es la mejor manera de calcular la similitud de coseno entre cada una de las columnas (o filas) en la matriz? Preferiría no iterar n-elegir-dos veces.

Digamos que la matriz de entrada es:

A= 
[0 1 0 0 1
 0 0 1 1 1
 1 1 0 1 0]

La escasa representación es:

A = 
0, 1
0, 4
1, 2
1, 3
1, 4
2, 0
2, 1
2, 3

En Python, es sencillo trabajar con el formato de entrada de matriz:

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

Da:

array([[ 1.        ,  0.40824829,  0.40824829],
       [ 0.40824829,  1.        ,  0.33333333],
       [ 0.40824829,  0.33333333,  1.        ]])

Eso está bien para una entrada de matriz completa, pero realmente quiero comenzar con la representación dispersa (debido al tamaño y escasez de mi matriz). ¿Alguna idea sobre la mejor manera de lograr esto? Gracias por adelantado.

Respuestas a la pregunta(9)

Su respuesta a la pregunta