Python TypeError: 'float' object is not iterable
Posted
技术标签:
【中文标题】Python TypeError: \'float\' object is not iterable 【英文标题】:Python TypeError: 'float' object is not iterable Python TypeError: 'float' object is not iterable 【发布时间】:2021-08-08 06:51:57 【问题描述】:我一直在用 Python 制作模型,但我不明白我的错误在哪里。
我的 IDE 说问题出在 'rule1' 上,但我不知道为什么。我读过这个类型错误,发现函数'range()'有帮助,但这给我带来了更多问题。之后,我发现使用 '//' 而不是 '/' 会有所帮助,但没有任何改变。 我不确定我是否没有正确使用这些解决方案,或者我的问题在代码中是否存在不止一个错误。 提前感谢您的帮助。
def model3(T,mu,alpha,beta):
d_3=np.zeros((3,3))
for h in range (T):
rew1=1
rew2=1
q1=0.5
q2=0.5
delta1=rew1-q1
delta2=rew2-q2
q1=q1+alpha*delta1
q2=q2+alpha*delta2
Q=range(q1+q2)
rule1=math.exp(beta*q1)//sum(math.exp(beta*(q1+q2)))
rule2=math.exp(beta*q2)//sum(math.exp(beta*(q1+q2)))
p=[rule1,rule2]
#Make choice according to choice probailities
c=random.choice(p)
#Generated reward
r_3=np.random.rand()
d_3[0,1]=1
d_3[0,2]=0
if c==p[0]:
m_3=mu[0]
d_3[1,0]=k[0]
else:
m_3=mu[1]
d_3[2,0]=k[1]
if r_3<m_3:
reward_3=1
if m_3==mu[0]:
d_3[1,1]=d_3[1,1]+1
else:
d_3[2,1]=d_3[2,1]+1
else:
reward_3=0
if m_3==mu[0]:
d_3[1,2]=d_3[1,2]+1
else:
d_3[2,2]=d_3[2,2]+1
return(d_3)
【问题讨论】:
能否请您展示您的全部追溯信息?TypeError Traceback (most recent call last) <ipython-input-12-a45e5a9dac98> in <module> ----> 1 model3(T,mu,.4,10) <ipython-input-11-d63b00e9209e> in model3(T, mu, alpha, beta) 12 q1=q1+alpha*delta1 13 q2=q2+alpha*delta2 ---> 14 Q=range(q1+q2) 15 rule1=math.exp(beta*q1)//sum(math.exp(beta*(q1+q2))) 16 rule2=math.exp(beta*q2)//sum(math.exp(beta*(q1+q2))) TypeError: 'float' object cannot be interpreted as an integer
【参考方案1】:
我相信问题出在这一行:
Q=range(q1+q2)
q1 和 q2 都是浮点数,即使它们加起来为 1.0 - 它仍然是浮点数,您不能将 range()
与浮点参数一起使用。
编辑: 根据下面的评论,您可以尝试这样做:
Q = range(int(q1 + q2))
【讨论】:
是的,我也这么认为。使用int
转换应该可以解决问题。
我将该更改添加到“Q”,现在我在“rule1”和“rule2”中使用它,而不是“q1+q2”。但是这个新的 TypeError 出现了:'unsupported operand type(s) for *: 'int' and 'range'' 我试图为每个 q 写一个 'range(int(' 但没有用【参考方案2】:
您的代码包含 2 个 range() 函数
for h in range(T):
和
Q = range(q1 + q2)
范围函数无法迭代浮点数,因此请尝试使用下面的代码行来解决您的问题。
for h in range(int(T)):
和
Q = range(int(q1 + q2))
【讨论】:
以上是关于Python TypeError: 'float' object is not iterable 的主要内容,如果未能解决你的问题,请参考以下文章
python numpy错误“TypeError:'numpy.float64'对象不能解释为整数”
python - TypeError:不可排序的类型:str()> float()
TypeError:不能将序列乘以“float”类型的非整数(python 2.7)
Python TypeError: 'float' object is not iterable