在Python 2.5.3.0中打印列表的标准差
我正在尝试从一个列表中计算标准差。我查了一些例子,但不知道为什么它们都无法正常工作。总和、中位数和平均数都能正常计算,只有标准差出现错误,我也不太清楚怎么才能让它打印出来。
这是我写的代码,没错,我知道可以简化。但这是我第一次尝试。
我目前遇到的错误是
AttributeError: 'module' object has no attribute 'stdev'
这是我写的代码,没错,我知道可以简化。但这是我第一次尝试。
num1 = int(input("Insert first number"))
num2 = int(input("Insert Next number"))
num3 = int(input("Insert Next number"))
num4 = int(input("Insert Next number"))
num5 = int(input("Insert Next number"))
num6 = int(input("Insert Next number"))
num7 = int(input("Insert Next number"))
num8 = int(input("Insert Next number"))
num9 = int(input("Insert Next number"))
num10 = int(input("Insert Last number"))
x = ([num1, num2, num3, num4, num5, num6, num7, num8, num9, num10])
total = sum(x)
print (total)
mean = total / 10
print (mean)
median = sorted(x)[len(x)//2]
print (int(median))
import stat
stdeviation = stat.stdev(x)
print (stdeviation)
2 个回答
0
在Python 2中,numpy
模块可以用来计算标准差。如果你有一个列表,可以把它转换成一个数组,这样就可以使用数组里的标准差功能了:
import numpy
lst = [1, 4, 2, 5, 2, 2.5]
print numpy.array(lst).std()
1
抱歉,模块 stat
是和 POSIX 系统调用 stat
有关的,而不是统计学的内容。无论如何,标准差是指每个数据点与平均值之间的差异的平方的平均值的平方根。你可以直接计算这个。不过,实际上你想计算的是“样本”标准差,这个计算方法会用到“贝塞尔修正”:不是简单地用样本数量来计算平方差的平均值,而是用样本数量减去一的结果来计算。
简单来说:样本标准差,在 Python 3 中叫做 statistics.stdev
,就是这个:
math.sqrt(sum([(val - mean)**2 for val in x])/(len(x) - 1))