Этот код:
import numpy as np
import cProfile
shp = (1000,1000)
a = np.ones(shp)
o = np.zeros(shp)
def main():
np.divide(a,1,o)
for i in xrange(20):
np.multiply(a,2,o)
np.add(a,1,o)
cProfile.run('main()')
печатает только:
3 function calls in 0.269 seconds
Ordered by: standard name
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 0.269 0.269 <string>:1(<module>)
1 0.269 0.269 0.269 0.269 testprof.py:8(main)
1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Prof
iler' objects}
Могу ли я заставить cProfile работать с numpy, чтобы сообщить мне, сколько вызовов он делает для различных вызовов np.*
и сколько времени он тратит на каждый?
изменить
Слишком громоздко обертывать каждую из функций numpy по отдельности, как предлагает hpaulj, поэтому я пытаюсь что-то вроде этого, чтобы временно обернуть многие или все интересующие функции:
def wrapper(f, fn):
def ff(*args, **kwargs):
return f(*args, **kwargs)
ff.__name__ = fn
ff.func_name = fn
return ff
for fn in 'divide add multiply'.split():
f = getattr(np, fn)
setattr(np, fn, wrapper(f, fn))
но cProfile по-прежнему ссылается на все их как ff