簡體   English   中英

非常簡單的python函數需要花費很長時間在函數而不是子函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM