Извините заранее, если я злоупотребляю любыми условиями, не стесняйтесь исправить это.
У меня есть отсортированный массив с dtype
'<f16, |S30'
. Когда я использую searchsorted
в своем первом поле, он работает очень медленно (около 0,4 секунды для 3 миллионов элементов). Это намного длиннее, чем bisect
принимает, чтобы сделать то же самое в простом списке кортежей Python.
%timeit a['f0'].searchsorted(400.)
1 loops, best of 3: 398 ms per loop
Однако, если я скопирую float-часть в другую, отдельный массив, поиск будет быстрее, чем bisect
:
b = a['f0'].copy()
%timeit b.searchsorted(400.)
1000000 loops, best of 3: 945 ns per loop
Мои вопросы:
- Я делаю что-то неправильно или это регрессия в NumPy?
- Есть ли способ обойти это без дублирования данных?