繁体   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