我知道这个网站上有很多类似的问题,但不幸的是我无法用现有的答案解决问题。我希望你不介意帮助我。 我有一个代码,我试图在迭代代码时将值附加到列表中。但是,在这个过程中出了问题,我最终得到了值0。 我不是很擅长调试,所以我找不到问题。 我在下面用较少的变量创建了一个更简单的代码版本:
`import math
from pylab import *
import numpy as np
#---------------------------INITIALIZATION-----------------------
#initializing the parameters of the model
Dt = 1
time_step = 50
#initializing the connection weights
w1 = 1
#initializing parameter values for the alogistic function
steepness_SS_a=1
speed_SS_a=1
threshold_SS_a=1
#--------------------THE FUNCTIONS---------------------------
def initialize():
global t, timesteps, WS_a, SS_a, new_WS_a, new_SS_a
#initialize model states
WS_a=1
SS_a=0
# initialize lists to update all states
new_SS_a=np.array([SS_a])
#initializing time list
t=0.
timesteps=[t]
def observe():
global t, timesteps, WS_a, SS_a, new_WS_a, new_SS_a
np.append(SS_a, new_SS_a)
timesteps.append(t)
def update():
global t, timesteps, WS_a, SS_a, new_WS_a, new_SS_a
# for each state activation value, write how to update it in the form of new_WS(a)=function(WS(a))
SS_a = SS_a + speed_SS_a * (((1/(1+math.exp(-steepness_SS_a * (w1 * WS_a - threshold_SS_a))))-(1/(1+math.exp(steepness_SS_a *threshold_SS_a))))* (1+math.exp(-steepness_SS_a*threshold_SS_a))-SS_a)
# for each state activation value now move the state value to new value
SS_a=new_SS_a
#updating the timestep
t = t + Dt
#--------------------THE PROGRAM-----------------
initialize()
while t<30.:
update()
observe()
#--------------------PLOTTING--------------------
print SS_a
plot(new_SS_a)
show()`
答案 0 :(得分:0)
怎么样:
import math
import numpy as np
from pylab import plot, show
def model():
Dt = 1
time_step = 50
#initializing the connection weights
w1 = 1
#initializing parameter values for the alogistic function
steepness_SS_a=1
speed_SS_a=1
threshold_SS_a=1
#initialize model states
WS_a=1
SS_a=0
# initialize lists to update all states
new_SS_a=np.array([SS_a])
#initializing time list
t=0.0
timesteps=[t]
while t<30.0:
## update()
# for each state activation value, write how to update it in the form of new_WS(a)=function(WS(a))
new = SS_a + speed_SS_a * (
(
(1/(1+math.exp(-steepness_SS_a * (w1 * WS_a - threshold_SS_a))))
-
(1/(1+math.exp(steepness_SS_a *threshold_SS_a)))
)
*
(1+math.exp(-steepness_SS_a*threshold_SS_a))
-
SS_a
)
new_SS_a = np.append(new_SS_a,new)
# for each state activation value now move the state value to new value
SS_a=new
#updating the timestep
t = t + Dt
##observe()
#np.append(SS_a, new_SS_a)
timesteps.append(t)
print( SS_a )
print( new_SS_a )
print( timesteps )
plot(new_SS_a)
show()
model()
市长更改位于SS_a = SS_a + speed_SS_a *...
我首先将该值保存为new = SS_a + speed_SS_a *...
,然后我将该值添加到new_SS_a
new_SS_a = np.append(new_SS_a,new)
(您需要捕获此结果) ,否则你就失去了它,并覆盖SS_a=new
另一件事是我把所有这些放在一起是因为以这种方式使用全局变量是一种不好的做法,全局应该用作常量而不是修改,如果你需要将它更改为函数结果,然后使该函数返回该值,然后更改为全局常量。另外import *
是另一个不好的做法,因为用不需要的东西污染你的命名空间,在某些情况下额外的东西可以在你不知道的情况下覆盖你需要的其他东西,更糟糕的是你使用多个那些因为调试更难如果你不知道或不记得,每个东西强迫你进行额外查找以确定哪些东西属于每个库,所以总是使用显式导入