使用NumPy、Numba和Python异步编程的高性能大数据分(4)

汇总统计Numba主程序如列表6所示。 

import time import numpy as np from class_summary_statistics_numba import SummaryStatisticsNumba def main(one_dimensional_array): # 创建类汇总统计numba类对象 class_summary_statistics_numba = SummaryStatisticsNumba() # 计算观测数 number_observation = class_summary_statistics_numba.calculate_number_observation(one_dimensional_array) print("Number of Observation: {} ".format(number_observation)) # 计算算术平均值 arithmetic_mean = class_summary_statistics_numba.calcuate_arithmetic_mean(one_dimensional_array, number_observation) print("Arithmetic Mean: {} ".format(arithmetic_mean)) # 计算中值 median = class_summary_statistics_numba.calculate_median(one_dimensional_array, number_observation) print("Median: {} ".format(median)) # 计算样本标准差 sample_standard_deviation = class_summary_statistics_numba.calculate_sample_standard_deviation(one_dimensional_array, number_observation, arithmetic_mean) print("Sample Standard Deviation: {} ".format(sample_standard_deviation)) if __name__ == '__main__': start_time = time.clock() one_dimensional_array = np.arange(1000000000, dtype=np.float64) main(one_dimensional_array) end_time = time.clock() print("Program Runtime: {} seconds".format(round(end_time - start_time, 1)))

列表6.  汇总统计Numba主程序

当行数达到十亿时,汇总统计Numba主程序将得到以下结果。

观测数: 1000000000 算术平均值: 499999999.067109 中值: 499999999.5 样本标准差: 288675134.73899055 程序运行时间: 40.2秒

NumPy数组达到十亿行时,计算在40.2秒内就完成了,这真是一个激动人心的结果。我认为现在是时候在大数据项目中更多地使用Numba库和NumPy数组了。当然某些特殊场景可能还需要进一步研究和测试。

笔记本硬件参数

下面是我运行上面这些Python程序所使用的笔记本电脑硬件参数:

Windows 10 64位操作系统

英特尔酷睿™i7-2670QM CPU @2.20 GHz

16 GB 内存

程序运行时间对比 

表1显示了数据行数为100万、1000万、1亿和10亿时不同程序的运行时间。

使用NumPy、Numba和Python异步编程的高性能大数据分

表1:  程序运行时间对比

结论 

单独使用NumPy数组与结合asyncio异步库的NumPy数组之间没有明显差别。由于本次计算量不足以证明Python数据科学项目中asyncio异步库的性能,因此可能需要进行更多的研究来找到它适合的应用场景。

与单独使用NumPy数组或结合asyncio异步库的NumPy数组相比,将NumPy数组与Numba库组合具有最佳的数据操作和分析性能。当Numpy数组中有十亿行数据时,执行时间竟然只需要40.2秒,令我印象深刻。我怀疑目前的R程序是否也可以达到这样的速度。如果不能,也许现在就是R程序的程序员学习Python及其数据生态系统库的时候了。除此之外,请务必采用持续集成软件开发和部署实践,使用面向对象编程方法论来为实际的生产环境编写Python程序。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/60e1d2d1a28483f2f3300925b08e2807.html