Numpy 用cProfile扩展模块分析代码

cProfile是从Python 2.5版本开始引入的C语言扩展模块。该模块可用来对代码进行确定性性能分析(deterministic profiling)。确定性性能分析意味着对时长的测量是精确的,没有采用抽样的方式。与此形成对照的是统计性能分析(statistical profiling),其特点是利用随机抽样来估算测量结果。我们将用cProfile分析一个小的NumPy程序,其功能是对一个由随机数构成的数组进行转置。

具体步骤

和之前的攻略一样,我们需要一段待分析的代码。

  1. 编写待分析的代码。

编写transpose函数。该函数创建一个由随机数构成的数组并对其进行转置。

def transpose(n):
  random_values = numpy.random.random((n, n))
  return random_values.T

  1. 运行分析器。

运行分析器时,需要把待分析的函数作为输入参数。

cProfile.run('transpose(%d)' %(int(sys.argv[1])))

本攻略的完整代码如下。

import numpy
import cProfile
import sys

def transpose(n):
    random_values = numpy.random.random((n, n))
    return random_values.T

cProfile.run('transpose(%d)' %(int(sys.argv[1])))

对于一个1000×1000的数组,我们得到如下输出结果。

4 function calls in 0.029 CPU seconds
  Ordered by: standard name
  ncalls tottime percall cumtime percall filename:lineno(function)
       1   0.001   0.001   0.029   0.029 <string>:1(<module>)
       1   0.000   0.000   0.028   0.028 cprofile_transpose.py:5(transpose)
       1   0.000   0.000   0.000   0.000 {method 'disable' of '_lsprof.Profiler' objects}
       1   0.028   0.028   0.028   0.028 {method 'random_sample' of 'mtrand.RandomState' objects}

输出结果中的各个列和用IPython进行性能分析中使用p选项后的输出相同。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程