[英]Very simple python functions takes spends long time in function and not subfunctions
我花了很多時間試圖弄清楚這里發生了什么。
下面代碼中的函數'grad_logp'在我的程序中被多次調用,而cProfile和runsnakerun可視化結果顯示函數grad_logp在本地花費大約.00004s'本地'每次調用都不在它調用的任何函數和函數'n中每次通話都會花費大約.00006秒。 這兩次合起約占我關心的節目時間的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
用C編碼的函數不通過分析進行檢測; 因此,例如,任何花在sum
時間(你正在拼寫__builtin__.sum
)將向其來電者收取費用。 不確定np.reshape
是什么,但如果它是numpy.reshape
,那同樣適用。
你的“許多小時”可能會更好地使你的代碼不再像一個曲折的小段落的迷宮,並記錄它。
第一種方法的arg calculation_set
未使用。
然后它確實p = params(self.p,self.parents)
但是p
p = params(self.p,self.parents)
使用。
variable is self
???
__builtin__.sum
???
先把它弄清楚,其次是正確的。 然后,只有這樣,擔心速度。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.