나는이 사이트를 읽고있어 내가 원하는 구체적인 대답을 찾지 못하고있다. 반복 및 발전기에 대한 데이비드 비즐리의 슬라이드를 읽으려고했지만 질문이 단순 해 보이지만 답변을 찾을 수 없습니다. 나는 시계 기반의 시뮬레이션 (신경 네트워킹을위한 브라이언)을 실행하고 있는데 출력을 조작하고 그것들을 합계에 더하는 발전기를 가지고있다. (간단한 저역 통과 필터에 n 지수 감쇠가 있기 위해서) . 그런 다음 각 시간 단계에서 이러한 생성기의 출력을 가져 와서 다른 함수에서 사용하여 상태 변수 중 일부를 업데이트하려고합니다. 항목이 생성기 유형이므로이 작업을 수행 할 수 없습니다.어떻게 생성기 yield 문을 다른 함수로 전달합니까? -Python
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 다른 발생기로 출력되어 도시하지만, 매우 유사한 ㄱ하지)
ron= (d/(1-b))
을 그러나 이 방법으로 생성자 개체를 사용할 수 없다고 말하지만, print 문을 사용하여 b (및 d)가 모든 timestep (시뮬레이션 실행시)을 원하는 출력을 제공하지만 이러한 출력을 가져 와서 아무것도 수행하지 못하는 것 그들과 함께. (구체적으로 지원되지 않는 피연산자 유형 '-'int 및 generator. 난 float() 숫자로 변환했는데 분명히이 동일한 이유로 작동하지 않습니다, 내 문제가 매우 간단한 솔루션이 있어야하지만 느낄 수 있지만 나는 그것을 찾을 수 없습니다 사전에 감사
1 b'는 b''로 작동하지 않을 수'는 발전기입니다 . 당신은'1-b.next()'또는'value = b.next(); 1 가치'. –
Shift 키를 사용하는 법을 배우십시오. "나"는 자신을 의미합니다. 정확하게 철자를 쓰는 것이 중요합니다. –
@StevenRumbalski 감사합니다 스티븐,이게 내가 정말로 찾고 있던 것입니다. 불행히도 나는 새로운 문제가 생겼다. network_operation 데코레이터를 사용하여이 업데이트 단계를 생성기에 적용하여 시뮬레이션 시간과 일치하는 반환 값을 허용하지 않아야한다. ("None"으로 표시됨) 리턴 할 수있는 방법이있다. 이 값을 얻고 생성기가 시뮬레이션과 동기화되지 않게하려면 최상위 네임 스페이스에 대한 값입니다. 따라서 표기법에서 부모 네임 스페이스까지 '값'을 전달하고 외부 네임 스페이스로 가져갈 수 있습니다. 데코레이터 및 함수의 네임 스페이스? –