Python 基于高斯分布的方差分析

Python 基于高斯分布的方差分析,python,random,gaussian,Python,Random,Gaussian,我有一个在python中使用高斯分布计算数字平方的代码。现在我的任务是计算相同的方差。但是当我尝试的时候,我总是会出错。代码如下: import random def generate_data(size): n = 5 m =0.5 mu, sigma = n ** 2, m/3 return [random.gauss(mu, sigma) for _ in range(size)] def average(ls): avg = sum(ls)

我有一个在python中使用高斯分布计算数字平方的代码。现在我的任务是计算相同的方差。但是当我尝试的时候,我总是会出错。代码如下:

import random
def generate_data(size):
    n = 5
    m =0.5
    mu, sigma = n ** 2, m/3
    return [random.gauss(mu, sigma) for _ in range(size)]


def average(ls):
    avg =  sum(ls) / len(ls)
    variance = (sum(ls) - sum(avg)) ** 2 / len(ls)

    return variance
我不擅长统计,所以我可能在公式上也错了。我也是python的初学者,我犯的错误是

'float' object is not iterable 

除非你真的想或必须自己做,否则我会使用
numpy



您的方差公式应为

variance = sum(map(lambda x: (x-avg) ** 2, ls)) / len(ls)

由于
variance=sigma^2
您可以通过打印
math.sqrt(variance)


您可能会发现,一次完成平均值、方差可能比三次传递法(总和+映射+总和)更快


你的方差公式是错误的,你能帮我修正它吗?请提供一个完整的错误回溯。我想你调用你的函数只有一个值。另一方面:为什么不使用
numpy.mean()
numpy.std()
?因为
avg
是浮点数,所以不能取
sum(avg)
。您可能是指
sum(ls)-avg*len(ls))
或类似的内容
import random, math


def generate_data(size):
    n = 5
    m = 0.5
    mu, sigma = n ** 2, m/3
    return [random.gauss(mu, sigma) for _ in range(size)]


def variance(ls):
    avg = sum(ls) / len(ls)
    variance = sum(map(lambda x: (x-avg) ** 2, ls)) / len(ls)

    return variance

print(0.5/3)                                     #0.16666666666666666
print(math.sqrt(variance(generate_data(100))))   #0.15702629417476763
print(math.sqrt(variance(generate_data(1000))))  #0.16248850600497303
print(math.sqrt(variance(generate_data(10000)))) #0.16774494705918871
def average(ls):
    sum  = 0.0
    sum2 = 0.0
    for v in ls:
        sum  += v
        sum2 += v*v

    mean = sum / len(ls)
    var  = sum2/len(ls) - mean*mean

    return (mean, var)