【问题标题】:Online Statistics Python: Variance is not calculating correctly在线统计 Python:方差计算不正确
【发布时间】:2019-02-14 10:39:45
【问题描述】:

SOF, 我是 Python 新手,我在网上找到了很多信息,但是它要求在计算平均值、方差等时使用列表,而我做不到。我计算用户输入的平均值没有问题,但方差已关闭。

据我了解,方差是“数字”与其“均值”“平方”之间的差异。也许问题出在那儿?我不确定是否诚实,这是我最后的手段,如果您能以任何方式提供帮助,将不胜感激,我也愿意接受有关如何编写代码的任何建议。

谢谢!

到目前为止我的代码:

n = input("Enter Number ")
n = int (n)
average = 0

sum = 0

for num in range(0,n+1,1):
        sum = sum + num;

mean = (sum *1.0/ n)

variance = 0

for num in range(n+1):
     sum = (num- mean)**2         

variance = (sum*1.0) 

print("Mean is: ",mean , "Variance is: ",variance)

【问题讨论】:

    标签: python mean variance


    【解决方案1】:

    首先,方差不仅仅是数均方,它是所有数均方的总和除以n(或n-1)

    计算方差的范围应该从1开始:range(1,n+1)

    var=0
    for num in range(1,n+1):
         var = var +(num- mean)**2         
    

    现在可以通过两种方式计算方差:除以nn-1,从而给出两个不同的答案

    variance1 = (var*1.0) /n
    variance2 = (var*1.0) /(n-1)
    

    例如:对于 n=10,variance1=8.25 和 variance2=9.166666666666666

    n 用于计算总体方差,n-1 用于计算样本方差。

    其他细节: 此外,在使用range 时,如果您的步长值为 1,则无需指定。使用range(0,n+1) 而不是range(0,n+1,1)

    避免对均值和方差使用相同的变量sum,因为这只会导致与公式混淆。

    【讨论】:

    • 谢谢你 Sruthi V,感谢你的意见,我做了你建议的更新,;但是,它仍然显示不正确的输出。例如;对于用户输入,10,均值应为 5.5,方差应为 9.16666666667。我得到:('平均值是:',5.5,'方差是:',11.275)
    • @Onecam 如果我的回答对你有用,你可以投票或接受我的回答吗
    【解决方案2】:

    range(n+1) 给你一个从 0 - n 开始的列表。但是你需要它从 1 - n 所以使用range(1, n+1)

    sum = 0
    for num in range(1,n+1):
     sum += (num- mean)**2 
    variance = sum/n
    

    附注:有一个内置的 statistics 库。

    【讨论】:

    • 谢谢 Dawit,我根据您的建议更新了我的代码,但是它仍然显示不正确的输出。例如;对于用户输入,10,均值应为 5.5,方差应为 9.16666666667。我得到:('平均值是:',5.5,'方差是:',11.275)
    【解决方案3】:
        def mean(n):
            sum = 0
            i = 0
            for i in range(len(n)):
                sum += n[i]
                i += 1
            avg = sum/len(n)
            return avg
    
        def var(*n):
            y = []
            sum = 0
            i = 0
            for item in n:
                y.append(item)
            for i in range(len(y)):
                sum += (y[i] - mean(y))**2
                i += 1
            variance = sum/len(y)
            return variance
    

    【讨论】:

    • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
    猜你喜欢
    • 1970-01-01
    • 2018-12-20
    • 2013-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多