|
|
51CTO旗下网站
|
|
移动端

2.4.3 使用编译库提高性能

《量化交易之路:用Python做股票量化分析》第2章量化语言——Python,第2部分(第2~6章)主要讲解了量化交易需要的基础知识及相关工具,如Python语言、NumPy、pandas、数据可视化及量化数学等知识,适合完全没有任何编程经验的读者从头开始阅读。本节为大家介绍使用编译库提高性能。

作者:阿布来源:机械工业出版社|2017-10-20 15:55

2.4.3  使用编译库提高性能

前面使用了多进程和多线程并行处理任务的技术,来提升Python代码的运行效率,除此之外,还有一些很棒的开源库可以提高性能,比如:

Numexpr可以快速计算数值,缺点是局限性大;

numba 运行时动态编译Python代码来提高效率;

Cython 静态编译Python代码来提高效率。

下面示例使用numba来提升性能效率。继续使用寻找最优参数例子,但这里放大了寻找范围,结果的参数排序组合集合共有49797个参数组合,下面仍然使用串行,共耗时1分钟48秒。

  1. # 买入后持股天数,放大寻找范围 1 ~ 503 天, 间隔1天  
  2. keep_stock_list = range(1, 504, 1)  
  3. # 下跌买入阀值寻找范围 -0.01 ~ -0.99 共99个  
  4. buy_change_list = [buy_change/100.0 for buy_change in range(-1, -100, -1)]  
  5. def do_single_task():  
  6.     task_list = list(itertools.product(keep_stock_list, buy_change_list))  
  7.     print '笛卡尔积参数集合总共结果为:{}个'.format(len(task_list))  
  8.     for keep_stock_threshold, buy_change_threshold in task_list:  
  9.         calc(keep_stock_threshold, buy_change_threshold)  
  10. # %time ipython magic code 详情查阅附录中关于IPython的使用  
  11. %time do_single_task() 

输出如下:

  1. 笛卡尔积参数集合总共结果为:49797个  
  2. CPU times: user 1min 48s, sys: 224 ms, total: 1min 48s  
  3. Wall time: 1min 48s 

备注:上面通过%time计算运行耗时的方法是IPython提供的magic code方法,详情可查阅附录中关于IPython的使用文档。

numba动态编译可提高效率。下面可以看到只用一行代码nb.jit()来静态编译原始函数,之后调用编译好的do_singletask_nb()函数,最后的结果是耗时1分钟13秒,相比未优化前效率提升了35秒。

  1. import numba as nb  
  2. do_single_task_nb = nb.jit(do_single_task)  
  3. %time do_single_task_nb() 

输出如下:

  1. 笛卡尔积参数集合总共结果为:49797个  
  2. CPU times: user 1min 13s, sys: 225 ms, total: 1min 13s  
  3. Wall time: 1min 13s 

针对性能效率,除了使用并行计算、静态动态编译库外,更重要的是写代码的时候就应该注意代码的运行效率,针对每一行代码寻找运行效率更高的写法。

如果想要将keep_stock_list和buy_change_list两个序列里的参数都打印出来,那么以下两种方案都可以实现。

(1)keep_stock_list + buy_change_list:

  1. for s in keep_stock_list + buy_change_list:  
  2.     print s 

(2)itertools.chain()函数:

  1. for s in chain(keep_stock_list, buy_change_list):  
  2.     print(s) 

第一种方案会创建一个全新的序列, 而itertools.chian()函数不会创建新的序列,所以如果输入序列非常大时会很节省内存,提升运行效率。

喜欢的朋友可以添加我们的微信账号:

51CTO读书频道二维码


51CTO读书频道活动讨论群:365934973

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

Wicked Cool Java中文版

本书主要介绍由Sun微系统公司创建的Java编程语言。 除了核心内容外,Java还有许多免费的财富,即开放源代码的库。本书就是为了介绍这些库...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊