
Мотивация
Важной частью работы специалиста по данным является адаптация лучших практик разработки программного обеспечения для повышения производительности, стабильности и читаемости конвейера данных.
Хотя Python достаточно гибок для достижения одной и той же цели с помощью различных методов, оптимизация сложности времени и пространства существенно влияет на производительность модели.
Векторизация — один из ключевых компонентов повышения производительности вашего конвейера машинного обучения.
Векторизация
Согласно Википедии, в контексте Python векторизация определяется программированием массивов и автоматической векторизацией.
Программирование массивов, стиль компьютерного программирования, в котором операции применяются к целым массивам, а не к отдельным элементам.
Автоматическая векторизация, оптимизация компилятора, которая преобразует циклы в векторные операции.
Например: в следующем коде pandas мы создаем новый столбец из существующих столбцов в кадре данных. Векторизация заняла 2,4 мс, что в 100 раз быстрее, чем обычный метод df.iterrows() (976 мс).
df["ratio"] = 100 * (df["d"] / df["c"])
result:
time: 2.41 ms (started: 2023-08-20 15:32:05 -07:00)
for idx, row in df.iterrows():
# creating a new column
df['ratio'] = 100 * (row["d"] / row["c"])
result:
time: 976 ms (started: 2023-08-20 15:32:03 -07:00)
Если вы выполняете числовые вычисления или вычисления с интенсивным использованием данных на Python и вам нужна производительность, вам обязательно стоит попробовать поискать в Numpy или Pandas данные для манипулирования данными, чтобы воспользоваться преимуществами векторизации.
Почему векторизация выполняется намного быстрее?
Векторизованные операции в Python, реализованные в таких библиотеках, как NumPy, выполняются быстрее, чем собственные циклы, поскольку они
- использовать высокооптимизированные низкоуровневые библиотеки, написанные на C и Fortran,
- обойти динамическую типизацию Python и накладные расходы цикла
- использовать смежные блоки памяти для эффективного кэширования доступа
- эти операции могут быть автоматически распараллелены и получить выгоду от снижения накладных расходов интерпретатора за счет…