Как оптимизировать многомерные операции с Numpy массивами с помощью Numexpr

Оптимизация многомерных операций с массивами Numpy с помощью Numexpr

Быстрое вычисление

Реальный кейс по оптимизации производительности в Numpy

Как оптимизировать операции с многомерными массивами Numpy с помощью Numexpr. Фото: создано автором, Canva.

Это относительно краткая статья. В ней я буду использовать реальный сценарий в качестве примера, чтобы объяснить, как использовать выражения Numexpr в многомерных массивах Numpy для достижения значительного повышения производительности.

Не так много статей, объясняющих, как использовать Numexpr в многомерных массивах Numpy и как использовать выражения Numexpr, поэтому я надеюсь, что эта статья вам поможет.

Введение

Недавно, во время обзора своих старых работ, я наткнулся на этот код:

def predict(X, w, b):    z = np.dot(X, w)    y_hat = sigmoid(z)    y_pred = np.zeros((y_hat.shape[0], 1))    for i in range(y_hat.shape[0]):        if y_hat[i, 0] < 0.5:            y_pred[i, 0] = 0        else:            y_pred[i, 0] = 1    return y_pred

Этот код преобразует результаты прогнозирования из вероятностей в классификацию результатов 0 или 1 в модели логистической регрессии машинного обучения.

Но, простите, кто будет использовать for loop для итерации по Numpy ndarray?

Вы можете предвидеть, что при достижении определенного объема данных они не только будут занимать много памяти, но и производительность будет низкой.

Именно, автором этого кода был я, когда я был моложе.

Ощущая ответственность, сегодня я планирую переписать этот код с использованием библиотеки Numexpr.

По пути я покажу вам, как использовать Numexpr и выражение Numexpr’s where в многомерных массивах Numpy для достижения значительного повышения производительности.

Реализация кода

Если вы не знакомы с основным использованием Numexpr, вы можете обратиться к этой статье:

Исследование Numexpr: мощный движок за Pandas

Повышение производительности анализа данных с помощью Numexpr для Python и функциями eval/query для Pandas

towardsdatascience.com