Обратная сортировка и сортировка аргументов в python

Я пытаюсь написать функцию на Python (все еще нуб!), Которая возвращает индексы и оценки документов, упорядоченные по внутренним продуктам их оценок tfidf.Процедура следующая:

  • Вычислить вектор внутренних продуктов между doc 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 - это разреженная матрица типа '' .

Это кажется неэффективным, поскольку сортировка выполняется дважды ( sort () , затем argsort () ), а затем результаты должны быть отменены.

  • Можно ли это сделать более эффективно?
  • Можно ли это сделать без преобразования разреженной матрицы с помощью toarray () ?
14
задан Fred Foo 9 December 2011 в 12:28
поделиться