Tôi cần lọc một mảng để loại bỏ các phần tử thấp hơn một ngưỡng nhất định. Mã hiện tại của tôi như thế này:
threshold = 5
a = numpy.array(range(10)) # testing data
b = numpy.array(filter(lambda x: x >= threshold, a))
Vấn đề là điều này tạo ra một danh sách tạm thời, sử dụng bộ lọc có chức năng lambda (chậm).
Vì đây là một hoạt động khá đơn giản, có thể có một hàm numpy thực hiện nó một cách hiệu quả, nhưng tôi không thể tìm thấy nó.
Tôi đã nghĩ rằng một cách khác để đạt được điều này có thể là sắp xếp mảng, tìm chỉ mục của ngưỡng và trả về một lát từ chỉ mục đó trở đi, nhưng ngay cả khi điều này sẽ nhanh hơn đối với các đầu vào nhỏ (và nó sẽ không đáng chú ý dù sao ), rõ ràng là tiệm cận của nó kém hiệu quả hơn khi kích thước đầu vào tăng lên.
Có ý kiến gì không? Cảm ơn!
Cập nhật : Tôi cũng đã thực hiện một số phép đo và phân loại + cắt vẫn nhanh hơn gấp đôi so với bộ lọc python thuần túy khi đầu vào là 100.000.000 mục nhập.
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