Как я могу передать оператор yield генератор другой функции. -Python
Я читал на этом сайте и не могу найти конкретный ответ, который я хочу. Я пытался прочитать слайды Дэвида Бисли об итерации и генераторах, но до сих пор не могу получить ответ, который ищу, хотя вопрос кажется простым. Я запускаю симуляцию на основе часов (Брайан для нейронных сетей), и у меня есть генератор, который манипулирует выходами и добавляет их к промежуточной сумме (для того, чтобы для простого фильтра нижних частот было n экспоненциального затухания), Затем я хочу получить выходные данные этих генераторов на каждом временном шаге, а затем использовать их в другой функции для обновления некоторых переменных состояния. В нем говорится, что, поскольку элемент имеет тип генератора, я не могу этого сделать. код и объяснение кода выглядит следующим образом:
import numpy
our_range=numpy.arange(0*ms,duration+defaultclock.dt,defaultclock.dt)
a=our_range
c=defaultclock.t #this is a clock that is part of the program i'm running, it updates every #timestep and runs through the range given above
def sum_tau(neuron): #this gives a running sum which i want to access (the alphas can be ignored as they are problem specific)
for c in a: #had to express it like this (with c and a) or it wouldn't run
if c ==0:
x=0
elif defaultclock.still_running()==False:
return
else:
x = x*(1-alpha) + p(neuron)*alpha
print x
yield x
#p(neuron) just takes some of the neurons variables and gives a number
b=sum_tau(DN) #this is just to specify the neuron we're working on, problem specific
@network_operation
def x():
b.next()
@network_operation означает, что на каждом такте будет выполняться нижеприведенная функция, поэтому обновляется сумма до требуемого значения. Теперь я хочу обновить значение, используемое для симуляции (где d - это вывод в другой генератор, не показан, но очень похож на b), набрав:
ron= (d/(1-b))
Тем не менее, он говорит, что я не могу использовать объект-генератор таким образом, я использовал операторы print, чтобы определить, что b (и d) дают выходные данные, которые я хочу получить на каждом временном шаге (когда выполняется симуляция), но я не могу получить эти выходные данные и делать что-нибудь с ними. (точнее, неподдерживаемый тип операнда '-' для int и generator. Я попытался преобразовать его в число с помощью float(), но, очевидно, это не работает по той же причине, я чувствую, что должно быть очень простое решение моей проблемы, но Я не могу найти это. Спасибо заранее.
1 ответ
"более конкретно, неподдерживаемый тип операнда" - "для int и генератора".
Вы не можете использовать генератор в тривиальной формуле. Вы должны "расширить" его с помощью выражения генератора.
ron= (d/(1-b))
Имеет генератор b
, право? b
это не "ценность". Это какая-то последовательность значений.
Таким образом, вы должны применить каждое значение в последовательности к вашей формуле.
ron = [ d/(1-x) for x in b ]
получит каждое значение последовательности и вычислит новое значение.
(Не ясно, если это действительно полезно, так как оригинал ron= (d/(1-b))
когда b
это коллекция значений не имеет особого смысла.)