Какой самый быстрый способ в Python для вычисления косинусного сходства, учитывая разреженные данные матрицы?

Учитывая разреженный список матриц, каков наилучший способ вычисления косинусного сходства между каждым из столбцов (или строк) в матрице? Я бы предпочел не повторять n-выбирать-два раза.

Скажем, входная матрица:

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.        ]])

Это хорошо для ввода с полной матрицей, но я действительно хочу начать с разреженного представления (из-за размера и разреженности моей матрицы). Любые идеи о том, как это может быть достигнуто лучше всего? Заранее спасибо.

Ответы на вопрос(9)

Ваш ответ на вопрос