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
从未在任何表达式中使用,它的赋值也应该移出循环。 p
和 q
也是如此,......所以那里一定有很多错误......
您在第一次迭代结束时返回。将返回拉出循环。返回一个值列表,而不仅仅是一个。
嗨,如果我将返回值保持在循环之外,我应该将熵公式的输出存储在哪里? (这样做后我得到一个错误)
嗨@trincot,我将 z 保留在循环中,因为我需要计算每个类别的熵(根据公式)。我不知道还能怎么做。如果可以,请提出替代方案。
【参考方案1】:
return 语句(如果存在)是函数中执行的最后一条语句。因此,一旦它返回女性类别的值,控件就会退出该函数。由于您的 return 语句位于 for 循环内,因此不会处理下一个类别。您可以将 return 移到 for 循环之外,并有一个列表来存储您想要返回的每个值。
【讨论】:
嗨,在将 return 保持在循环之外之后,我现在得到的是第二个类别的输出,而不是两者。我不确定如何将每个值存储在列表中。如果您可以使用描述的代码向我展示。 解决了,谢谢。以上是关于Python中的循环计算[重复]的主要内容,如果未能解决你的问题,请参考以下文章