cProfile
is a C extension introduced in Python 2.5. It can be used for deterministic profiling. Deterministic profiling means that the time measurements are precise, and no sampling is used. Contrast this with statistical
profiling, where measurements come from random samples. We will profile a small NumPy program, using cProfile
that transposes an array with random values.
Again we require code to profile.
We will write the transpose
function that creates the array with random values and transposes it:
def transpose(n): random_values = numpy.random.random((n, n)) return random_values.T
Run the profiler and give it the function to profile:
cProfile.run('transpose(%d)' %(int(sys.argv[1])))
The complete code for this tutorial can be found in the following snippet:
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])))
For a 1000-by-1000 array, we get the following output:
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}
The columns in the output are the same as in the IPython profiling recipe.