python float object not iterab中的标准偏差

2024-09-28 05:25:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在python中找到数字的标准偏差。这是一个入门级编程类,所以我避免尝试使用函数,因为它们还没有被引入。在

这个程序允许我在列表中添加数字,分析列表,然后得出平均值、最小值、最大值、标准偏差等。我成功地显示了除STDev之外的所有内容,我一直得到的错误是float object not iterable。以下是相关部件的代码:

elif (menuchoice == 4):
        sum = 0.0
        print("std deviation")
        stdev = 0.0
        for i in range(listcount):
            scorenum4 = eval(scorenum[i])
            scoreaverage2 += scorenum4
        scoreaverage2 /= listcount
        for i in range(listcount):
            stdev = []
            scorenum3 = eval(scorenum[i])
            stdev += (scorenum3 - scoreaverage2)**2
            dev = sqrt((stdev)/listcount-1)
        print(dev)

任何帮助都会很好,谢谢。在

-Self-edit-我刚刚从for循环中删除了stdev=[],不知道为什么会有它-我现在得到了一个答案,但它在数学上是关闭的

  • 改为dev=sqrt((stdev)/listcount,它修复了我的数学错误,DSM也确认了这个修复。谢谢你
  • 程序现在运行正常!呜呜。谢谢大家的建议。在

Tags: indev程序列表for错误evalrange
3条回答

另一个答案提出了一种更为Python式的方法,但我建议在这里进行更正。 虽然效率不高,但对于初学者来说,经典算法更容易理解。在

假设scorenum是一个数组,存储您需要的数据和STD

import math
average=0.0
for ii in scorenum: # iterate the data array, it can contain float
    sum+=ii
average/=float(len(scorenum)) # number of data=array length

# now, compute an estimator of std=sqrt(variance/n), where variance=sum((xi-xavg)**2)
std=0.0
for ii in scorenum:
    std+=(ii-average)**2
std=math.sqrt(std/float(len(scorenum))) # if you prefer n-1: std/float(len(scorenum)-1)

print "average=",average," std=",std

评论: -你可以迭代任何类型的数组 -必须导入数学库 -像+=和/=这样的运算符是用来表示幻想的。它们相当于sum=sum+ii,average=average/。。。。在

这是一种计算标准差的冗长方法。这是一种更像Python的方式,我敢说它也更具可读性。在

mean = sum(scorenum, 0.0) / len(scorenum)
d = [ (i - mean) ** 2 for i in scorenum]
std_dev = math.sqrt(sum(d) / len(d))

代码中的数学错误如下:

        dev = sqrt((stdev)/listcount-1)

您想要dev = sqrt(stdev/listcount)或{},这取决于您的d.o.f.偏好。在我解决了这个问题之后,你的(修改的)代码似乎可以工作了。在

相关问题 更多 >

    热门问题