Imaginez que j'ai un tableau numpy et que je dois trouver les plages où cette condition est vraie. Par exemple, j'ai le tableau suivant dans lequel j'essaie de trouver les plages où les éléments sont supérieurs à 1 :
[0, 0, 0, 2, 2, 0, 2, 2, 2, 0]
Je devrais trouver les indices (début, fin) :
(3, 5)
(6, 9)
La chose la plus rapide que j'ai réussi à implémenter est de créer un tableau booléen de :
truth = data > threshold
puis de parcourir le tableau en utilisant numpy.argmin
et numpy.argmax
pour trouver les positions de début et de fin.
pos = 0
truth = container[RATIO,:] > threshold
while pos < len(truth):
start = numpy.argmax(truth[pos:]) + pos + offset
end = numpy.argmin(truth[start:]) + start + offset
if not truth[start]:#rien de plus
break
if start == end:#va jusqu'à la fin
end = len(truth)
pos = end
Mais ceci a été trop lent pour les milliards de positions dans mes tableaux et le fait que les plages que je trouve sont en général juste quelques positions d'affilée. Est-ce que quelqu'un connaît un moyen plus rapide de trouver ces plages ?