【发布时间】:2018-04-15 20:50:30
【问题描述】:
我写了以下代码。代码运行良好。但是当我添加yt[i]=y[i-1]+delta(R1,R2) 时,会出现错误:
yt[i]=y[i-1]+delta(R1,R2)
KeyError: 1
函数a只是一个例子,并不是真实的。
import numpy as np
import math
from math import *
x = { 0: 0.3 }
xt = {}
N=10
y = { 0: 0.2 }
yt = {}
def a(z,s):
return sqrt(z)+s
def delta(r1,r2):
sig=0.055
d=sig*(np.sqrt(-2*np.log(r1))*np.cos(np.radians(r2)))
return d
for i in range(1,N):
R1=np.random.uniform(0,1)
R2=np.random.uniform(0,1)
R3=np.random.uniform(0,1)
xt[i]=x[i-1]+delta(R1,R2)
yt[i]=y[i-1]+delta(R1,R2)
if a(xt[i],yt[i])>R3:
x[i]=xt[i]
print('f')
else:
x[i]=x[i-1]
print('s')
print(x[i], delta(R1,R2), i)
感谢您的帮助。
【问题讨论】:
-
代码引发了
KeyError,因为在 for 循环的第二次迭代中,i=2和y={0: 0.2}。你期望y[i-1]在第二次迭代中是什么?将该值分配给y[i-1]。 -
@phihag 很好,
x = { 0: 0.3 }可以正常工作,为什么y会出错?y与x完全相同,但参数不同。 -
@phihag 对于
i=1y是0.2,对于i=2y是0.2+delta等等。 -
您的代码中没有数组。您正在使用
dict。 -
@juanpa.arrivillaga 已更新。请问您知道任何解决方案吗?
标签: python arrays random keyerror