标准差(Standard Deviation)是概率统计学上非常重要的概念,它被用来描述一组数据的离散程度。
根据标准差的定义,总体标准差σ表示为:而样本标准差S表示为:
总体标准差还有另外一种表示方式:

以上的两种总体标准差计算方法都有三个明显的问题:

  1. 代码实现时需要用一个数组来保存所有要计算的数据,如果数据比较大,那么会耗费非常大的空间。
  2. 计算时需要对数组总体进行两次遍历,一次计算平均值,一次计算平方,数据较多时耗时也非常大。
  3. 对于数据整体差距不大的情况,由于对接近0的浮点数做了平方计算,在数据非常多时累计损失的精度会较大,最终导致计算错误。

针对以上的3个问题,一个叫Welford的大神提出了一种迭代计算标准差的方法:
首先,将均值和方差初始化为0:M1 = x1,S1 = 0,
然后通过以下迭代公式计算每次来新的数据后的均值和标准差:
Mk = Mk-1+ (xk – Mk-1)/k
Sk = Sk-1 + (xk – Mk-1)*(xk – Mk)。
前k个数据的标准差为:s2 = Sk/(k – 1)。(样本标准差用k-1,总体标准差用k)
该计算方法只需要保存两个数据:Mk 和Sk,耗费的空间非常小。由于使用的是迭代的方式,每次的计算量也是非常小的。
通过MATLAB产生1000 000 000个0-1的浮点数,然后分别采用以上三种方法计算放差,最后可以发现方法三最有,方法一表现也尚可,而方法二损失精度非常多,甚至出现了负数的结果。
以下通过MATLAB计算数据集data(可以自己用随机函数生成)每50个数据的方差,对比Welford法和MATLAB内置的var函数(总体方差,除以N)的计算结果,可以发现两者结果是一致的,大家也可以尝试直接计算一个大数据集的标准差,并对比两种方法的精度。

data = rand(10000, 1);
len = length(data);
Mk = data(1);
Mk_1 = Mk;
Sk = 0;
Sk_1 = Sk;
S = zeros(len, 1);
V = zeros(len, 1);
k = 1;
for i = 1:lenk = mod(i, 50);if k == 0k = 50;endxk = data(i);Mk = Mk_1 + (xk - Mk_1)/k;Sk = Sk_1 + (xk - Mk_1)*(xk - Mk);if mod(i, 50) == 0S(i) = Sk / k;V(i) = var(data(i-49:i), 1);Mk = data(i);Sk = 0;endMk_1 = Mk;Sk_1 = Sk;
end
figure
hold on
grid minor
plot(V)
plot(S)
legend("matlab var", "Welford Method”)

参考资料:百度百科、维基百科

一种计算标准差的高效方法:Welford迭代法相关推荐

  1. 微带线特性阻抗计算公式_几种计算微带线特性阻抗的方法.pdf

    几种计算微带线特性阻抗的方法 周刊 年第 期 ○信息技术教学与研究 2011 25 几种计算微带线特性阻抗的方法 段卓琦 大理学院 工程学院 云南 大理 ( , 671000 ) 摘 要 本文从不同的 ...

  2. 回转半径的计算公式_一种计算船舶回转半径的方法

    一种计算船舶定常回转半径的方法 摘 要 根据船舶定常回转运动时舵的转船力矩和水的阻转矩相等,计算出船舶定常回转动 的回转角速度,估算出船舶定常回转运动的回转半径 .根据估算结果得出,船舶定常回转 运动 ...

  3. 对tableView三种计算动态行高方法的分析

    tableView是一个神奇的东西,可以这么说,就算是一个初学者如果能把tableView玩的很6,那编一般的iOS的需求都问题不大了.tableView是日常开发中用烂了的控件,但是关于tableV ...

  4. arcmap中图斑面积代表_【干货】ArcGIS四种计算图斑面积的方法

    用精细的过程管理模式提供优质的服务 用先进的地理信息技术推动社会的发展 ArcGIS中有多种方法可计算出图斑面积 本文总结了四种方法 01 计算几何 本人认为这是最适合非专业人士的方法,直接利用Arc ...

  5. 一种计算用户留存的方法

    0x00 概述 用户留存分析是互联网时代常用的一种数据分析方法.而很多快速发展的公司并没有相应的方法论沉淀,这就导致了在计算用户留存的时候会出现下面的一些问题:1)用户留存的定义不明确,不同的研发有自 ...

  6. 求最大公因数的两种方法(高效方法)

    给定两个数,例如a=27,b=12a=27, b=12a=27,b=12,我们知道a, b的最大公因数为3. 下面将介绍两种求最大公因数的高效方法: (1)辗转相除法 辗转相除法有一个高大上的名字:欧 ...

  7. matlab 安装出来封面就没了,基于Matlab的计算报告书封面生成方法及计算机存储介质与流程...

    本发明涉及一种计算报告书封面生成方法及计算机存储介质,特别是涉及一种基于Matlab的计算报告书封面生成方法及计算机存储介质. 背景技术: 技术人员在采用Matlab大型矩阵计算软件进行工程计算等科研 ...

  8. 计算 java_两种计算Java对象大小的方法(转)

    原文:http://blog.csdn.net/iter_zc/article/details/41822719 另一篇类似文章:http://www.cnblogs.com/magialmoon/p ...

  9. 聊聊JVM(三)两种计算Java对象大小的方法

    普通对象的结构如下,按64位机器的长度计算 1. 对象头(_mark), 8个字节 2. Oop指针,如果是32G内存以下的,默认开启对象指针压缩,4个字节 3. 数据区 4.Padding(内存对齐 ...

最新文章

  1. 揪出MySQL延迟上千秒的元凶
  2. 谭浩强课后题之----求阶乘和
  3. LeetCode - 4. 寻找两个正序数组的中位数
  4. vbs的任务提醒程序
  5. toString()和String.valueOf()的区别(转)
  6. github的使用教程
  7. SilverLight中的数据绑定
  8. 棋牌游戏服务器设计(1)
  9. 深入理解对象的数据属性与访问器属性及属性间相互转换
  10. openfire源码编译后部署到linux
  11. Android打包出多个dex文件,一个APK中包含多个dex方法
  12. 视频教程-CCNA视频----从零开始学CCNA实验视频课程(加强版)-思科认证
  13. UltraISO制作启动盘时报错:磁盘/映像容量太小
  14. MATLAB中多行注释的三种方法
  15. 手把手教你搭建微信小程序服务器(HTTPS)
  16. MMD布料解算【新手小白】
  17. HPU 1725: 感恩节KK专场——特殊的比赛日期【水】
  18. 【转载】用Python计算身份证校验码
  19. 回溯法采用的搜索策略_17图的搜索算法之回溯法
  20. 泰森多边形(Voronoi图)

热门文章

  1. Lombok Plugin
  2. 心跳之旅—iOS用手机摄像头检测心率(PPG)
  3. 当AI对话系统像自动驾驶一样分级,谁能率先跑出L5?
  4. kindle忘记密码怎么办_如果您的Kindle丢失或被盗怎么办
  5. 使用ambari安装hadoop集群
  6. python编程从入门到实践 项目一:外星人入侵
  7. 基于swiper使用vue-awesome-swiper 实现鼠标移入暂停自动播放、左右按钮控制前进后退、常见避坑、API中文文档地址
  8. DS1042C数字示波器的波形截图流程
  9. 移动端开发-体检预约
  10. SQL查询中的模糊匹配