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) &lt;ipython-input-12-a45e5a9dac98&gt; in &lt;module&gt; ----&gt; 1 model3(T,mu,.4,10) &lt;ipython-input-11-d63b00e9209e&gt; in model3(T, mu, alpha, beta) 12 q1=q1+alpha*delta1 13 q2=q2+alpha*delta2 ---&gt; 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 ​

Ode 集成器 Python TypeError 'float' 对象不可下标

python中的ValueError和TypeError