Python中的循环计算[重复]

Posted

技术标签:

【中文标题】Python中的循环计算[重复]【英文标题】:Loop calculations in Python [duplicate] 【发布时间】:2018-06-29 00:52:57 【问题描述】:

按照我的领导的要求,我正在尝试从头开始构建熵函数。我有一个数据集 Ttrain,有很多变量,性别是其中之一。我必须提取类别(男性和女性),然后使用以下代码在 循环 中计算概率和熵:

def entropy3(c):
    import math
    u=c.unique()
    a=[]
    b=[]
    z=[]
    for i in range(len(u)):
        a=Ttrain[(c==u[i]) & (Ttrain.survived==1)].survived.count()
        b=Ttrain[(c==u[i]) & (Ttrain.survived==0)].survived.count()
        p=a/(a+b)
        q=b/(a+b)
        z=-(p)*math.log(p,2)-(q)*math.log(q,2)
        return z

现在,当我运行 print(entropy3(Ttrain.sex)) 时,我得到 0.85,这是女性类别的熵。这意味着循环不会迭代到其他类别。如果有人能指出我哪里出错了,将不胜感激。我对编程很陌生,所以请原谅任何概念性错误。

【问题讨论】:

请确保您的代码的缩进是正确的。循环中的无条件return 肯定是不正确的。我想它应该是 after 循环,而不是 in。其次,z 被初始化为一个列表,而在循环中它获取数值。看起来不对。由于z 从未在任何表达式中使用,它的赋值也应该移出循环。 pq 也是如此,......所以那里一定有很多错误...... 您在第一次迭代结束时返回。将返回拉出循环。返回一个值列表,而不仅仅是一个。 嗨,如果我将返回值保持在循环之外,我应该将熵公式的输出存储在哪里? (这样做后我得到一个错误) 嗨@trincot,我将 z 保留在循环中,因为我需要计算每个类别的熵(根据公式)。我不知道还能怎么做。如果可以,请提出替代方案。 【参考方案1】:

return 语句(如果存在)是函数中执行的最后一条语句。因此,一旦它返回女性类别的值,控件就会退出该函数。由于您的 return 语句位于 for 循环内,因此不会处理下一个类别。您可以将 return 移到 for 循环之外,并有一个列表来存储您想要返回的每个值。

【讨论】:

嗨,在将 return 保持在循环之外之后,我现在得到的是第二个类别的输出,而不是两者。我不确定如何将每个值存储在列表中。如果您可以使用描述的代码向我展示。 解决了,谢谢。

以上是关于Python中的循环计算[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Python中的重复直到或等效循环[重复]

python 6 循环

python之循环

for循环中的Python项目计数[重复]

Python 基础之循环

Python 循环