Я пытаюсь написать функцию на Python (все еще нуб!), Которая возвращает индексы и оценки документов, упорядоченных по внутренним произведениям их оценок tfidf. Процедура:
- Вычислить вектор внутренних продуктов между документом
idx
и всеми другими документами
- Сортировка по убыванию
- Возвратите "оценки" и индексы от второго до конца (т.е. не самого себя)
Код, который у меня есть на данный момент:
import h5py
import numpy as np
def get_related(tfidf, idx) :
''' return the top documents '''
# calculate inner product
v = np.inner(tfidf, tfidf[idx].transpose())
# sort
vs = np.sort(v.toarray(), axis=0)[::-1]
scores = vs[1:,]
# sort indices
vi = np.argsort(v.toarray(), axis=0)[::-1]
idxs = vi[1:,]
return (scores, idxs)
, где tfidf
- это sparse matrix of type '<type 'numpy.float64'>'
.
Это кажется неэффективным, поскольку сортировка выполняется дважды (sort()
, затем argsort()
), а затем результаты должны быть обращены.
- Можно ли сделать это более эффективно?
- Можно ли это сделать без преобразования разреженной матрицы с помощью
toarray()
?