如果我有这样的列表:
results=[-14.82381293, -0.29423447, -13.56067979, -1.6288903, -0.31632439,
0.53459687, -1.34069996, -1.61042692, -4.03220519, -0.24332097]
我想在Python中计算这个列表的方差,这是与平均值的平方差的平均值.
我怎么能这样做?访问列表中的元素进行计算让我感到困惑,因为我得到了方差.
解决方法:
你可以使用numpy的内置函数var
:
import numpy as np
results = [-14.82381293, -0.29423447, -13.56067979, -1.6288903, -0.31632439,
0.53459687, -1.34069996, -1.61042692, -4.03220519, -0.24332097]
print(np.var(results))
这将为您提供28.822364260579157
如果 – 无论出于何种原因 – 您不能使用numpy和/或您不想使用内置函数,您也可以使用例如“手动”计算它. a list comprehension:
# calculate mean
m = sum(results) / len(results)
# calculate variance using a list comprehension
var_res = sum((xi - m) ** 2 for xi in results) / len(results)
这给你相同的结果.
如果您对标准偏差感兴趣,可以使用numpy.std:
print(np.std(results))
5.36864640860051
@Serge Ballesta explained very well方差n和n-1之间的差异.在numpy中,您可以使用选项ddof轻松设置此参数;它的默认值为0,因此对于n-1情况,您可以简单地执行以下操作:
np.var(results, ddof=1)
“手工”解决方案在@Serge Ballesta’s answer中给出.
两种方法均产生32.024849178421285.
您也可以为std设置参数:
np.std(results, ddof=1)
5.659050201086865