tgoop.com/dsproglib/6438
Last Update:
NumExpr — мощный инструмент для ускорения вычислений с массивами в Python, который может значительно повысить производительность при работе с большими данными и сложными математическими выражениями.
Преобразовать медленный цикл, который занимал 650 мс, в вычисление за 60 мс — это реальность с использованием NumExpr.
Вот как NumExpr ускоряет вычисления
NumExpr избегает создания огромных временных массивов, разбивая их на части, соответствующие размеру кэша.
Эти части обрабатываются и передаются через легковесную виртуальную машину, что ускоряет выполнение и оптимизирует доступ к памяти.
Использование инструкций SIMD (Single Instruction, Multiple Data) позволяет обрабатывать несколько элементов данных одновременно.
При доступности NumExpr использует библиотеку Intel Math Kernel Library (MKL) для трансцендентных функций (таких как sin(), cos(), exp()), что значительно повышает производительность.
NumExpr автоматически распределяет вычисления между всеми ядрами процессора. Это позволяет эффективно использовать мощности многозадачности, ускоряя вычисления даже при больших данных.
Для работы с NumExpr достаточно заменить стандартные операции NumPy на аналоги NumExpr:
import numexpr as ne
import numpy as np
# Пример массивов
a = np.random.random(1000000)
b = np.random.random(1000000)
# Обычная операция NumPy
result = np.sin(a) + np.cos(b)
# Эквивалент NumExpr
result_ne = ne.evaluate('sin(a) + cos(b)')
Библиотека дата-сайентиста #буст