使用高斯分布Python的方差

时间:2015-09-30 13:24:51

标签: 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) / len(ls)
    variance = (sum(ls) - sum(avg)) ** 2 / len(ls)

    return variance

我的统计数据并不好,所以我的公式也可能出错了。我也是python的初学者。我得到的错误是

'float' object is not iterable 

3 个答案:

答案 0 :(得分:1)

你的方差公式应为

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

source

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

来测试代码
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

答案 1 :(得分:1)

你可能会发现,一次性的均值,方差,可能比3次传递更快(总和+地图+总和)

TableRow

答案 2 :(得分:0)