0


【附代码】NumPy加速库NumExpr(大数据)

文章目录

作者:小猪快跑
基础数学&计算数学,从事优化领域5年+,主要研究方向:MIP求解器、整数规划、随机规划、智能优化算法

如有错误,欢迎指正。如有更好的算法,也欢迎交流!!!——@小猪快跑

相关文献

  • NumExpr Documentation Reference — numexpr 2.8.5.dev1 documentation

测试电脑配置

博主三千元电脑的渣渣配置:

CPU model: AMD Ryzen 7 7840HS w/ Radeon 780M Graphics, instruction set [SSE2|AVX|AVX2|AVX512]
Thread count: 8 physical cores, 16 logical processors, using up to 16 threads

数组加减乘除

我们计算 2 * a + 3 * b,发现在数据量较大时候,NumExpr明显快于NumPy
在这里插入图片描述

  1. import perfplot
  2. from matplotlib import pyplot as plt
  3. import numpy as np
  4. import numexpr as ne
  5. defnumpy_add(a, b):return2* a +3* b
  6. defnumexpr_add(a, b):return ne.evaluate("2 * a + 3 * b")if __name__ =='__main__':
  7. b = perfplot.bench(
  8. setup=lambda n:(np.random.rand(n), np.random.rand(n)),
  9. kernels=[
  10. numpy_add,
  11. numexpr_add,],
  12. n_range=[2** k for k inrange(25)],
  13. xlabel="length of DataFrame",)
  14. plt.figure(dpi=300)
  15. b.save(f"arr_add.png")
  16. b.show()

数组乘方

我们计算 2 * a + b ** 10,发现在数据量较大时候,NumExpr明显快于NumPy
在这里插入图片描述

  1. import perfplot
  2. from matplotlib import pyplot as plt
  3. import numpy as np
  4. import numexpr as ne
  5. defnumpy_power(a, b):return2* a + b **10defnumexpr_power(a, b):return ne.evaluate("2 * a + b ** 10")if __name__ =='__main__':
  6. b = perfplot.bench(
  7. setup=lambda n:(np.random.rand(n), np.random.rand(n)),
  8. kernels=[
  9. numpy_power,
  10. numexpr_power,],
  11. n_range=[2** k for k inrange(25)],
  12. xlabel="length of DataFrame",)
  13. plt.figure(dpi=300)
  14. b.save(f"arr_power.png")
  15. b.show()

Pandas加减乘除

我们计算 (a + b) / (c - 1),发现在数据量较大时候,NumExpr明显快于Pandas

在这里插入图片描述

  1. import pandas as pd
  2. import perfplot
  3. from matplotlib import pyplot as plt
  4. from numpy.random._examples.cffi.extending import rng
  5. import numexpr as ne
  6. defpandas_add(df):return(df['A']+ df['B'])/(df['C']-1)defnumexpr_add(df):return df.eval('(A + B) / (C - 1)')defnumpy_arr_add(df):
  7. a = df['A'].values
  8. b = df['B'].values
  9. c = df['C'].values
  10. return(a + b)/(c -1)defnumexpr_arr_add(df):
  11. a = df['A'].values
  12. b = df['B'].values
  13. c = df['C'].values
  14. return ne.evaluate("(a + b) / (c - 1)")if __name__ =='__main__':
  15. b = perfplot.bench(
  16. setup=lambda n: pd.DataFrame(rng.random((n,3)), columns=['A','B','C']),
  17. kernels=[
  18. pandas_add,
  19. numexpr_add,
  20. numpy_arr_add,
  21. numexpr_arr_add,],
  22. n_range=[2** k for k inrange(25)],
  23. xlabel="length of DataFrame",)
  24. plt.figure(dpi=300)
  25. b.save(f"pandas_add.png")
  26. b.show()

总结

总体来说在大数据下会有多倍的性能提升。但我们也容易观察到,就算10e8量级的数据,进行一次运算的时间也不超过1秒。一般计算次数多,数据量大,对速度有要求的场景下可以使用。

标签: numpy 大数据

本文转载自: https://blog.csdn.net/ymzhu385/article/details/136073609
版权归原作者 小猪快跑爱摄影 所有, 如有侵权,请联系我们删除。

“【附代码】NumPy加速库NumExpr(大数据)”的评论:

还没有评论