Сравнение производительности 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