返回包含算术平均值和无偏样本方差的元组

我必须编写一个函数,它接受长度≥2 的数字列表,并返回一个包含这些数字的算术平均值和无偏样本方差的元组。即给定一个项目列表 [𝑥1,𝑥2,…,𝑥𝑁],返回一个元组 (𝑚,𝑠2),其中:

https://img2.mukewang.com/64db45680001ae9804660227.jpg

我不允许使用内置函数,如求和、任何数学函数等。我不知道在不使用这些函数的情况下如何继续。

我的代码:

def mean_variance(numbers):
    m = sum(numbers) / len(numbers)
    var = sum((xi - m) ** 2 for xi in numbers) / len(numbers)
        return m, var

我正在测试的内容:

assert(mean_variance([1, 2, 3]) == (2, 1))


红糖糍粑
浏览 121回答 3
3回答

繁华开满天机

我不知道为什么不允许您使用内置函数,但我想您可以在没有内置函数的情况下做到这一点,如下所示:def mean_variance(numbers):    meanSum = 0    for num in numbers:        meanSum += num    mean = meanSum / len(numbers)    varSum = 0    for num in numbers:        varSum += (num - mean) ** 2    var = varSum / (len(numbers) - 1)    return mean, var

蝴蝶不菲

我用 替换了该sum函数reduce并更正了公式中的错误。这是代码:from functools import reducedef mean_variance(numbers):    m = reduce(lambda x, y: x+y, numbers) / len(numbers)    var = reduce(lambda x, y: x+y, ((xi - m) ** 2 for xi in numbers)) / (len(numbers)-1)    return m, var

慕尼黑的夜晚无繁华

不使用任何内置方法平均值和方差可以是浮点数。所以返回int或float将由自动处理assertdef mean_variance(inputList):  sum = 0  lenList = 0  for val in inputList:    sum = int(val) + sum    lenList = lenList + 1  mean = sum/lenList  sum_sq = 0  for val in inputList:    sq = (int(val) - int(mean)) ** 2    sum_sq = sum_sq + sq  variance = sum_sq/(lenList-1)  return (float(mean), float(variance))print(mean_variance([1, 2, 3]))assert mean_variance([1, 2, 3]) == (2, 1)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python