Tri inverse et argsort en python

Je suis en train d'écrire une fonction en Python (encore un noob!) qui retourne les indices et scores des documents commandés par l'intérieure des produits de leur tfidf scores. La procédure est la suivante:

  • De calcul de vecteur de l'intérieur des produits entre doc idx et tous les autres documents
  • Trier dans l'ordre décroissant
  • Retour les "scores" et les indices de la seconde à la fin (c'est à dire pas en lui-même)

Le code que j'ai en ce moment est:

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 est un sparse matrix of type '<type 'numpy.float64'>'.

Cela semble inefficace, comme le tri est effectué en deux fois (sort() puis argsort()), et les résultats doivent ensuite être inversé.

  • Cela peut-il être fait de manière plus efficace?
  • Cela peut-il être fait sans la conversion de la matrice creuse à l'aide de toarray()?

source d'informationauteur tdc