J'ai besoin de filtrer un tableau pour supprimer les éléments qui sont inférieurs à un certain seuil. Mon code actuel est le suivant :
threshold = 5
a = numpy.array(range(10)) # testing data
b = numpy.array(filter(lambda x: x >= threshold, a))
Le problème est que cela crée une liste temporaire, en utilisant un filtre avec une fonction lambda (lent).
Comme il s'agit d'une opération assez simple, il existe peut-être une fonction numpy qui le fait de manière efficace, mais je n'ai pas réussi à la trouver.
J'ai pensé qu'une autre façon d'y parvenir pourrait être de trier le tableau, de trouver l'indice du seuil et de retourner une tranche à partir de cet indice, mais même si cela serait plus rapide pour les petites entrées (et ce ne sera pas perceptible de toute façon), c'est définitivement asymptotiquement moins efficace lorsque la taille de l'entrée augmente.
Des idées ? Merci !
Mise à jour : J'ai également pris quelques mesures, et le tri+découpage était toujours deux fois plus rapide que le filtre python pur lorsque l'entrée était de 100.000.000 entrées.
In [321]: r = numpy.random.uniform(0, 1, 100000000)
In [322]: %timeit test1(r) # filter
1 loops, best of 3: 21.3 s per loop
In [323]: %timeit test2(r) # sort and slice
1 loops, best of 3: 11.1 s per loop
In [324]: %timeit test3(r) # boolean indexing
1 loops, best of 3: 1.26 s per loop