Мені потрібно відфільтрувати масив, щоб видалити елементи, які нижчі за певний поріг. Мій поточний код такий:
threshold = 5
a = numpy.array(range(10)) # testing data
b = numpy.array(filter(lambda x: x >= threshold, a))
Проблема в тому, що це створює тимчасовий список, використовуючи фільтр з лямбда-функцією (повільний).
Оскільки це досить проста операція, можливо, існує функція numpy, яка робить це ефективно, але мені не вдалося її знайти.
Я думав, що іншим способом досягнення цього може бути сортування масиву, пошук індексу порогу та повернення фрагмента з цього індексу далі, але навіть якщо це буде швидше для невеликих входів (і це все одно не буде помітно ), його остаточно асимптотично менш ефективним із збільшенням розміру вхідних даних.
Будь-які ідеї? Дякую!
Оновлення : Я також зробив кілька вимірювань, і сортування + нарізання все ще було вдвічі швидшим, ніж чистий фільтр python, коли вхідні дані складали 100 000 000 записів.
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