ресурсы для сложности операций numpy?

#python #numpy #scipy

#python #numpy #scipy

Вопрос:

Я пытаюсь оптимизировать производительность некоторого кода numpy. Проблема в том, что я просто слепо заменяю код эквивалентным кодом и профилирую для сравнения результатов.

Предоставляет ли numpy какой-либо ресурс, описывающий сложность / производительность его основных операций (либо теоретический анализ, либо некоторые практические практические правила), например

  • основные операции (например: сумма, умножение, возведение в степень)
  • разные типы данных (например: float против complex)
  • векторизация / трансляция в зависимости от размера матрицы (например: векторизация за пределами 2 измерений, по-видимому, снижает производительность по сравнению с эквивалентным циклом for)

Комментарии:

1. Сложность перечисленных базовых операций O(n) связана с n размером массива. Сложность не зависит от вычисляемого типа (фиксированного размера, если вы не используете типы объектов, что не рекомендуется). Операции на основе представления выполняются в постоянное время, если только это не связано с копированием (это часто описывается в документе). Такие вещи, как векторизация, не меняют сложность, только производительность. О производительности операций не сообщается, поскольку она зависит от реализации . Лучший способ проверить это — запустить его. Производительность сильно зависит от целевой платформы . В противном случае проверьте код.

2. «похоже, что векторизация за пределами 2-х измерений ухудшает производительность по сравнению с эквивалентным циклом for» — это зависит от операции и размеров массивов. Что касается ресурсов — я бы не ожидал найти то, что вы хотите, в документах numpy. Вместо этого я бы искал там и в других местах некоторые рекомендации / «подсказки numpy», подобные этому (обратите внимание, что я недостаточно хорош, чтобы просмотреть это и сказать, что это на 100% правильно)