python代码,numpy如何实现方差/标准差计算?
发布于 作者:苏南大叔 来源:程序如此灵动~

在前文中,苏南大叔讲述了方差、标准差、样本方差、样本标准差的概念。这些概念对于数据统计是非常基础的知识。这些数学概念如何转化为python
代码呢?这就是本文主要讨论的问题。
苏南大叔的“程序如此灵动”博客,记录苏南大叔的代码所学所想。本文中利用numpy
来实现对方差标准差的计算,另外,由于前面已经介绍了方差标准差的概念和实现公式。所以,这里也试着实现了一下方差标准差函数。
基本知识
首先需要对方差、标准差的概念定义有所理解:
因为里面大量涉及了乘方以及开方的概念,这里又研讨了一下在python
里面实现乘方开方运算的可能性:
方案一,numpy
实现方差、标准差【推荐】
np
为numpy
的引入后的别称,data
为要计算的数据列表。
方案叙述
(总体)方差计算:
np.var(data)
(总体)标准差计算:
np.std(data)
样本方差计算:
np.var(data, ddof=1)
样本标准差计算:
np.std(data, ddof=1)
测试代码
测试代码:
import numpy as np
data = [2, 4, 6]
mean = np.mean(data) # 计算均值
variance = np.var(data) # 计算方差
standard_deviation = np.std(data) # 计算标准差
variance2 = np.var(data, ddof=1) # 计算样本方差
standard_deviation2 = np.std(data, ddof=1) # 计算样本标准差
print("平均值:%s" % mean)
print("方差:%s,样本方差:%s" % (variance, variance2))
print("标准差:%s,样本标准差:%s" % (standard_deviation, standard_deviation2))
输出了预期数据:
平均值:4.0
方差:2.6666666666666665,样本方差:4.0
标准差:1.632993161855452,样本标准差:2.0
方案二,自定义方差、标准差函数
下面的代码是苏南大叔根据网上的例子自己改编的,也可能不对,大家复制的时候请自己做分析。
方案叙述
自定义方差计算:
np.mean([math.pow(x - np.mean(data), 2) for x in data])
自定义标准差计算:
math.sqrt(np.mean([math.pow(x - np.mean(data), 2) for x in data]))
自定义样本方差计算:
sum([math.pow(x - np.mean(data), 2) for x in data]) / (len(data) - 1)
自定义样本标准差计算:
math.sqrt(sum([math.pow(x - np.mean(data), 2) for x in data]) / (len(data) - 1))
测试代码
测试代码:
import numpy as np
import math
data = [2, 4, 6]
def mean(data):
# return sum([x for x in data]) / len(data)
return sum(data) / len(data)
def var(data):
return np.mean([math.pow(x - np.mean(data), 2) for x in data])
def std(data):
return math.sqrt(np.mean([math.pow(x - np.mean(data), 2) for x in data]))
def var2(data):
return sum([math.pow(x - np.mean(data), 2) for x in data]) / (len(data) - 1)
def std2(data):
return math.sqrt(
sum([math.pow(x - np.mean(data), 2) for x in data]) / (len(data) - 1)
)
mean2 = mean(data) # 计算均值
variance = var(data) # 计算方差
standard_deviation = std(data) # 计算标准差
variance2 = var2(data) # 计算样本方差
standard_deviation2 = std2(data) # 计算样本标准差
print("平均值:%s" % mean2)
print("方差:%s,样本方差:%s" % (variance, variance2))
print("标准差:%s,样本标准差:%s" % (standard_deviation, standard_deviation2))
输出了预期数据:
平均值:4.0
方差:2.6666666666666665,样本方差:4.0
标准差:1.632993161855452,样本标准差:2.0
结束语
感谢大家的捧场,点击下面的链接,查看更多内容:


