如何使用Numexpr优化多维Numpy数组操作

优化多维Numpy数组操作:掌握Numexpr的使用技巧

快速计算

Numpy性能优化的真实案例研究

如何使用Numexpr优化多维Numpy数组操作。图片来源:由作者创建,Canva。

这是一篇相对简短的文章。在其中,我将使用一个真实场景作为示例,解释如何在多维Numpy数组中使用Numexpr表达式,以实现显著的性能提升。

关于如何在多维Numpy数组中使用Numexpr以及如何使用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库重新编写这段代码。

在此过程中,我将向你展示如何在多维Numpy数组中使用Numexpr和Numexpr的where表达式,以实现显著的性能提升。

代码实现

如果你对Numexpr的基本用法不熟悉,可以参考这篇文章:

探索Numexpr:Pandas背后的强大引擎

通过Python的Numexpr和Pandas的eval/query函数提升数据分析性能

towardsdatascience.com