小红班上有两组同学的数学考试分数为:
第一组:小红:100分,小明:60分,小宇:20分
第二组:小蓝:70分,小华:60分,小杰:50分
那么很容易算出,第一组的平均分是60分,第二组的平均分也是60分。
这下可好,小红的100分被小宇拉了后腿。这时候,该引入一种方法,来表现这个问题。好让老师知道哪些小组的成绩差距比较大。
方差能比较好的表达一组数据离散的程度,方差大,这组数据分散的就比较大;方差小,这组数据分散的就比较小。
方差(variance)的表达公式为:
照这个公式计算,第一组的方差为:
第二组的方差为:
可以看出,第一组的方差远大于第二组。
下面用C语言实现
#include <stdio.h> float calc_variance(float samples[], int count) { float sum_of_samples = 0; float average = 0; float variance = 0; for(int i = 0; i < count; i++) { sum_of_samples += samples[i]; } average = sum_of_samples / count; for(int i = 0; i < count; i++) { float temp = samples[i] - average; variance += (temp * temp); } variance /= count; return variance; } int main() { float team1[] = {100, 60, 20}; float team2[] = {70, 60, 50}; printf("variance of team 1 is %f\n", calc_variance(team1, 3)); printf("variance of team 2 is %f\n", calc_variance(team2, 3)); return 0; }
运行结果为:
variance of team 1 is 1066.666626
variance of team 2 is 66.666664