#python #numpy #scipy
#python #numpy #scipy
Вопрос:
Я пытаюсь оптимизировать производительность некоторого кода numpy. Проблема в том, что я просто слепо заменяю код эквивалентным кодом и профилирую для сравнения результатов.
Предоставляет ли numpy какой-либо ресурс, описывающий сложность / производительность его основных операций (либо теоретический анализ, либо некоторые практические практические правила), например
- основные операции (например: сумма, умножение, возведение в степень)
- разные типы данных (например: float против complex)
- векторизация / трансляция в зависимости от размера матрицы (например: векторизация за пределами 2 измерений, по-видимому, снижает производительность по сравнению с эквивалентным циклом for)
Комментарии:
1. Сложность перечисленных базовых операций
O(n)
связана сn
размером массива. Сложность не зависит от вычисляемого типа (фиксированного размера, если вы не используете типы объектов, что не рекомендуется). Операции на основе представления выполняются в постоянное время, если только это не связано с копированием (это часто описывается в документе). Такие вещи, как векторизация, не меняют сложность, только производительность. О производительности операций не сообщается, поскольку она зависит от реализации . Лучший способ проверить это — запустить его. Производительность сильно зависит от целевой платформы . В противном случае проверьте код.2. «похоже, что векторизация за пределами 2-х измерений ухудшает производительность по сравнению с эквивалентным циклом for» — это зависит от операции и размеров массивов. Что касается ресурсов — я бы не ожидал найти то, что вы хотите, в документах numpy. Вместо этого я бы искал там и в других местах некоторые рекомендации / «подсказки numpy», подобные этому (обратите внимание, что я недостаточно хорош, чтобы просмотреть это и сказать, что это на 100% правильно)