【发布时间】:2018-09-29 16:04:49
【问题描述】:
我有以下代码,我只是写了它的最后一部分。由于某些原因,我们使用random.normal 值。很明显,func 函数具有三个变量。
我的问题是:计算的步骤是101,而我们在输出中的每个参数都有100 值。我应该如何告诉 Python,如果您看到 Wo[i]>0 和 Omo[i]<0 重新计算该步骤(这将使用另一个随机数),直到我们得到正确的答案 (Wo[i]<0 and Omo[i]>0。
我们必须这样做,因为,如果我们打印输出然后删除那些不满足我们条件的值,例如,我们有 60 个值而不是 100 个. 我知道我们可以使用while loop 但我不知道如何使用。
N=101
for i in range (1,N):
R=np.random.uniform(0,1)
Omn[i] = Omo[i-1] + 0.05 * np.random.normal()
Wn[i] = Wo[i-1] + 0.05 * np.random.normal()
Mn[i] = Mo[i-1] + 0.1 * np.random.normal()
L = exp(-0.5 * ( func(Omn[i], Wn[i], Mn[i] ) - func( Omo[i-1], Wo[i-1], Mo[i-1] )))
if L>R:
Wo[i]=Wn[i]
Mo[i]=Mn[i]
Omo[i]=Omn[i]
else:
Wo[i]=Wo[i-1]
Mo[i]=Mo[i-1]
Omo[i]=Omo[i-1]
print(Wo[i],Mo[i],Omo[i])
【问题讨论】:
-
while(found == false)当你得到正确答案时found = true?? -
while Wo[i]>0 and Omo[i]<0: # calculate again? -
@MoeA 我这样做了,但是 Python 只是在思考,并没有打印任何东西
标签: python if-statement random while-loop