python高性能写法_Python高性能编程

Abstract

使用Python,似乎就与高性能没多大关系了。但毕竟作为一个Python入门者,而且是把Python用于机器学习,数据挖掘这样计算量庞大的任务,还是应该尽可能提升程序的性能。又,即使不是做数据相关,写任何代码也是该尽可能地避免一些低效的操作。一个月前,做数据挖掘课程作业时,编写的Python版本的LFM模型计算耗时之巨,完全无法接受,粗略估算:完成整个模型的训练需要昼夜不停执行一个月时间。而后,使用C++重新编写才勉强完成,上交作业。

基于上述,买书时在《Python数据科学手册》与《Python高性能编程》之中选择了后者。书中各种提升性能的方式非常绚丽繁复,但现阶段所能用者,预计不过十一,故只做粗略翻阅,于眼下有益处做简要笔记,余下各种奇淫技巧待到研究生期间再来细细学习。

书名:《Python高性能编程》

作者:Micha Gorelick, Ian Ozsvald

译者:胡世杰,徐旭彬

出版社:人民邮电出版社

利用CPU的矢量操作

1

2

3

4

5

6

7

8

9

10import math

def (number):

sqrt_number = num.sqrt(number)

number_float = float(number)

for i in xrange(2, int(sqrt_number) + 1):

if (number_float / i).is_integer():

return False

return True

CPU的矢量操作不需要额外的时间代价,意味着它可以一次进行多个独立计算。利用这一特性,理想的计算模型如下代码所示:

1

2

3

4

5

6

7

8

9

10

11

12

13import math

def (number):

sqrt_number = num.sqrt(number)

number_float = float(number)

numbers = range(2, int(sqrt_number) + 1)

for i in xrange(0, len(numbers), 5):

result = (number_float / numbers[i : (i + 5)]).is_integer()

if any(result):

return False

return True

理解Python GIL

对于Python来说,充分利用多核性能的阻碍主要在于Python的全局解释器所(GIL)。GIL确保Python进城一次只能执行一条指令,无论当前有多少个核。

解决方案:

multiprocessing标准库

numexpr标准库

Cython

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值