Это такой JIT компилятор, который компилирует подмножество Python кода в быстрый машинный код, который намного быстрее чем обычное выполнение в cpython. Но только строго определенное подмножество Python кода может быть скомпилированно.
Сложно сказать, в какой момент numba становится эффективной. Однако, есть несколько индикаторов которые помогут провести черту:
- Если вы не можете использовать jit с nopython=True - если вы не можете скомпилировать что-то в режиме nopython вы либо пытаетесь скомпилировать слишком много либо это не будет работать значительно быстрее
- Если вы не используете массивы - когда вы имеете дело со списками или другими типами, которые вы подаете на вход в функцию numba (за исклюдчением других numba функций), numba копирует эти данные что-бы избежать большого оверхэда
- Если уже есть NumPy или SciPy функция которая делает это - даже если numba может значительно ускорить код для коротких массивов, для больших скорее всего numba покажет такую же скорость
Есть еще одна причина, почему вы вероятно не захотите использовать numba только потому, что она немного быстрее чем другие решения: Numba-функции должны быть скомпилированны заранее, в противном случае время на компиляцию будет потрачено больше чем выигрыш по скорости. Еще numba довольно медленно импортируется и ее функции добавляют overhead. Как по мне, нет никакого смысла использовать это ради нескольких миллисекунд, особенно с учетом того что импорт может достигать 1-10 секунд.
Граффик: Numba быстрее всего обрабатывает маленький массив, но на больших NumPy обгоняет ее.
Присоединяйтесь — мы покажем вам много интересного
Присоединяйтесь к ОК, чтобы подписаться на группу и комментировать публикации.
Нет комментариев