«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Почему np.vectorize() быстрее, чем df.apply() для создания столбцов Pandas?

Почему np.vectorize() быстрее, чем df.apply() для создания столбцов Pandas?

Опубликовано 8 ноября 2024 г.
Просматривать:353

  Why is np.vectorize() Faster than df.apply() for Pandas Column Creation?

Сравнение производительности Pandas apply и np.vectorize

Было замечено, что np.vectorize() может быть значительно быстрее, чем df. apply() при создании нового столбца на основе существующих столбцов в DataFrame Pandas. Наблюдаемая разница в производительности связана с базовыми механизмами, используемыми этими двумя методами. цикл уровня Python, который выполняет итерацию по каждой строке DataFrame. Как показано в предоставленных тестах, циклы уровня Python, такие как понимание списков и отображение, выполняются относительно медленно по сравнению с настоящими векторизованными вычислениями.

np.vectorize() vs df.apply()

np.vectorize() преобразует пользовательскую функцию в универсальную функцию (ufunc). Ufuncs высоко оптимизированы и могут выполнять поэлементные операции с массивами NumPy, используя код на основе C и оптимизированные алгоритмы. В этом отличие от df.apply(), который работает с объектами серии Pandas и требует дополнительных накладных расходов.

Истинная векторизация: оптимальная производительность

Для действительно эффективного создания столбцов , настоятельно рекомендуется использовать векторизованные вычисления в NumPy. Такие операции, как numpy.where и прямое поэлементное деление с помощью df["A"]/df["B"] выполняются чрезвычайно быстро и позволяют избежать накладных расходов, связанных с циклами.

Оптимизация Numba

Для еще большей эффективности можно дополнительно оптимизировать циклы с помощью Numba, компилятора, который преобразует функции Python в оптимизированный код C. Numba может сократить время выполнения до микросекунд, значительно превосходя по производительности df.apply() и np.vectorize().

Вывод

Хотя np.vectorize() может предложить некоторое улучшение по сравнению с df.apply(), оно не является настоящей заменой векторизованных вычислений в NumPy. Чтобы добиться максимальной производительности, используйте оптимизацию Numba или прямые векторизованные операции в NumPy для создания новых столбцов в Pandas DataFrames.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3