Я потратил много часов, пытаясь понять, что здесь происходит.Очень простые функции 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 дает мне время, проведенное внутри суммы, и переформатируйте. Знают ли эти цифры что-то еще? Оба они сообщаются как довольно быстро. –
@ Джон, я думаю, 'cProfile' развился с тех пор, как я в последний раз его использовал и изучил его, но я не вижу другого объяснения - помимо вызовов других функций, эти два метода действительно очень мало. –