我花了很多時間試圖弄清楚這裏發生了什麼。非常簡單的python函數花費很長時間在函數中而不是子函數
下面代碼中的函數'grad_logp'在我的程序中多次調用,cProfile和runnakerun可視化結果顯示函數grad_logp在本地花費了大約.00004s的每個調用,而不是它調用的任何函數。函數'n'在每次調用時在本地花費大約.00006s。這兩次共同組成了我關心的節目時間的大約30%。看起來好像這不是函數開銷,因爲其他python函數在本地花費的時間少得多,合併'grad_logp'和'n'不會使我的程序更快,但是這兩個函數的操作似乎相當平凡。有沒有人對可能發生的事情有任何建議?
我做了一些明顯效率低下的事嗎?我誤解了cProfile的工作原理嗎?
def grad_logp(self, variable, calculation_set):
p = params(self.p,self.parents)
return self.n(variable, self.p)
def n (self, variable, p):
gradient = self.gg(variable, p)
return np.reshape(gradient, np.shape(variable.value))
def gg(self, variable, p):
if variable is self:
gradient = self._grad_logps['x'](x = self.value, **p)
else:
gradient = __builtin__.sum([self._pgradient(variable, parameter, value, p) for parameter, value in self.parents.iteritems()])
return gradient
呵呵,cProfile給了我總共花費的時間,並重塑。這些數字是否意味着別的?他們都報道速度相當快。 – 2010-06-07 02:55:31
@John,我想'cProfile'自從我上次使用並深入研究以來已有所發展,但我沒有看到任何其他解釋 - 除了調用其他函數外,這兩種方法確實非常少。 – 2010-06-07 03:48:05