关于python程序的性能分析

这篇博客 可能先会看看 关于numpy中怎么使筛选数据更快 然后会讲到python中的性能分析

我先用传统的时间分析来处理numpy中不同的两种筛选处理方式,(这个筛选方式的错误其实很低级,但我自己有点喜欢犯这个错误)时间分析分别用time.time()和time.clock()

def count_time(narray):
    start = time.clock()
    tmp1 = narray[narray[:,2]>=9]
    tmp2 = tmp1[tmp1[:,3]>10]
    end = time.clock()
    print("Time cost")
    print (str(end-start))
    
count_time(final_matrix)
Time cost
0.2029331441008253

def count_time(narray):
    start = time.clock()
    tmp1 = narray[(narray[:,2]>=9)&(narray[:,3]>10)]
    end = time.clock()
    print("Time cost :")
    print (str(end-start))
    
count_time(final_matrix)
Time cost :
0.08848516002763063

可以从代码中看出,前一个就是分别用了两次筛选,但我仔细研究了一下numpy,它主要有两种方式,一种是view 一种是copy view其实就是换个别名,对view之后的对象操作也会改变原数据,而copy是重新开辟了一片内存来保存新对象,所以理所当然copy会比view更耗时间。

但是在numpy中除了直接用切片筛选是属于view的操作,其他的方式都是copy的操作(包括index 和我程序中的 布尔型mask筛选),所以我这个上面copy了两次,下面只是copy一次,所以下面的耗时会更短。尤其当你的筛选条件很多的时候,把他们写在一块会大大降低你的运行时间,也会减少你程序的运行空间。

然后因为一般来看时间,大多都会扯出time.time() time.clock()两者,我看到的解释是 前者是运行时间,其中包括CPU时间,IO时间以及等待时间,而后者只是看CPU时间,但是我的结果很奇怪,如下所示,我的clock所花的时间是大于我的time的(下面那个使用多个条件来筛选时,clock所花的时间是大于time的,这个有点奇怪,但是确实time是不稳定的,如结果所示)

def count_time(narray):
    start = time.time()
    tmp1 = narray[narray[:,2]>=9]
    tmp2 = tmp1[tmp1[:,3]>10]
    end = time.time()
    print("Time cost")
    print (str(end-start))
    
count_time(final_matrix)
Time cost
0.2323775291442871

count_time(final_matrix)
Time cost
0.21288275718688965

def count_time(narray):
    start = time.time()
    tmp1 = narray[(narray[:,2]>=9)&(narray[:,3]>10)]
    end = time.time()
    print("Time cost :")
    print (str(end-start))
    
count_time(final_matrix)
Time cost :
0.06784677505493164

现在我就想着除了这种传统的自己设定start end 还有没有其他针对于python的性能分析工具

结果发现了cProfile!

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值