连续计算平均数和方差

问题:对数列x[n]x[n]x[n],计算其平均数m[n]m[n]m[n],方差v[n]v[n]v[n],平均数m[n]为x[1]到x[n]之间数的平均值v[n]为x[1]到x[n]之间的方差
m[n]=∑1n(x[i]n)v[n]=∑in((x[i]−m[n])2n)m[n]=\sum_1^n(\frac{x[i]}{n})\\ v[n]=\sum_i^n(\frac{(x[i]-m[n])^2}{n}) m[n]=1∑n​(nx[i]​)v[n]=i∑n​(n(x[i]−m[n])2​)

这个问题用通用的方法计算没有问题,但是效率会比较低。因为计算后面的平均数和方差时,前面的数重复累加计算了多次。对于平均数m[n],一个简单的优化方法就是设置一个累加序列s[n],s[i]为x[0]到x[i]之间数的和。这样计算平均数m[n],很容易从s[n]得到,计算方差呢?也可以设置另一个累加序列s2[n],s2[i]为x[0]到x[i]之间数的平方和。
s[n]=∑1n(x[i])m[n]=s[n]ns2[n]=∑1nx[i]2v[n]=∑1nx[i]2+n∗m[n]2−2∗m[n]∗∑1nx[i]n=s2[n]+n∗m[n]2−2∗m[n]∗s[n]ns[n]=\sum_1^n(x[i])\\ m[n]=\frac{s[n]}{n}\\ s2[n]=\sum_1^n{x[i]^2}\\ v[n]=\frac{\sum_1^n{x[i]^2}+n*m[n]^2-2*m[n]*\sum_1^n{x[i]}}{n}\\ =\frac{s2[n]+n*m[n]^2-2*m[n]*s[n]}{n} s[n]=1∑n​(x[i])m[n]=ns[n]​s2[n]=1∑n​x[i]2v[n]=n∑1n​x[i]2+n∗m[n]2−2∗m[n]∗∑1n​x[i]​=ns2[n]+n∗m[n]2−2∗m[n]∗s[n]​
但是这种方法需要另外再多加两个数组s[n]和s2[n]。下面介绍一种更好的方法,据说来自Donald Knuth 的《计算机程序设计艺术》第二卷,但是我粗略在这本书中找了一下没有找到。我是在《Learning JavaScript JavaScript Essentials for Modern Application Development》这本书中介绍reduce方法(P140)看到的,觉得这种递推方法很漂亮。下面进行推导:
m[n]=∑1n(x[i]n)=∑1n−1x[i]+x[n]n=∑1n−1x[i]n−1∗n−1n+x[n]n=m[n−1]∗n−1n+x[n]n=n∗m[n−1]−m[n−1]+x[n]n=m[n−1]+x[n]−m[n−1]nm[n]=\sum_1^n(\frac{x[i]}{n})\\ =\frac{\sum_1^{n-1}x[i]+x[n]}{n}\\ =\frac{\sum_1^{n-1}x[i]}{n-1}*\frac{n-1}{n}+\frac{x[n]}{n}\\ =m[n-1]*\frac{n-1}{n}+\frac{x[n]}{n}\\ =\frac{n*m[n-1]-m[n-1]+x[n]}{n}\\ =m[n-1]+\frac{x[n]-m[n-1]}{n} m[n]=1∑n​(nx[i]​)=n∑1n−1​x[i]+x[n]​=n−1∑1n−1​x[i]​∗nn−1​+nx[n]​=m[n−1]∗nn−1​+nx[n]​=nn∗m[n−1]−m[n−1]+x[n]​=m[n−1]+nx[n]−m[n−1]​
方差的计算有点区别,先计算其二阶矩。
M2[n]=∑1n(x[i]−m[n])2=∑1n(x[i]−m[n−1]−x[n]−m[n−1]n)2=∑1n(x[i]−m[n−1])2+(x[n]−m[n−1])2n−2∗x[n]−m[n−1]n∗∑1nx[i]−m[n−1]=M2[n−1]+(x[n]−m[n−1])2+(x[n]−m[n−1])2n−2∗(x[n]−m[n−1])2n=M2[n−1]+(x[n]−m[n−1])2−(x[n]−m[n−1])2n=M2[n−1]+(x[n]−m[n−1])∗(x[n]−m[n−1]−m[n]+m[n−1])=M2[n−1]+(x[n]−m[n−1])∗(x[n]−m[n])M2[n]=\sum_1^n{(x[i]-m[n])^2}\\ =\sum_1^n{(x[i]-m[n-1]-\frac{x[n]-m[n-1]}{n})^2}\\ =\sum_1^n{(x[i]-m[n-1])^2}+\frac{(x[n]-m[n-1])^2}{n}-2*\frac{x[n]-m[n-1]}{n}*\sum_1^n{x[i]-m[n-1]}\\ =M2[n-1]+(x[n]-m[n-1])^2+\frac{(x[n]-m[n-1])^2}{n}-2*\frac{(x[n]-m[n-1])^2}{n}\\ =M2[n-1]+(x[n]-m[n-1])^2-\frac{(x[n]-m[n-1])^2}{n}\\ =M2[n-1]+(x[n]-m[n-1])*(x[n]-m[n-1]-m[n]+m[n-1])\\ =M2[n-1]+(x[n]-m[n-1])*(x[n]-m[n]) M2[n]=1∑n​(x[i]−m[n])2=1∑n​(x[i]−m[n−1]−nx[n]−m[n−1]​)2=1∑n​(x[i]−m[n−1])2+n(x[n]−m[n−1])2​−2∗nx[n]−m[n−1]​∗1∑n​x[i]−m[n−1]=M2[n−1]+(x[n]−m[n−1])2+n(x[n]−m[n−1])2​−2∗n(x[n]−m[n−1])2​=M2[n−1]+(x[n]−m[n−1])2−n(x[n]−m[n−1])2​=M2[n−1]+(x[n]−m[n−1])∗(x[n]−m[n−1]−m[n]+m[n−1])=M2[n−1]+(x[n]−m[n−1])∗(x[n]−m[n])

m[n]和M2[n]计算都有一个x[n]−m[n−1]x[n]-m[n-1]x[n]−m[n−1]项,M2[n]还有一项很相似的x[n]−m[n]x[n]-m[n]x[n]−m[n],并且都是累加的形式。虽然计算v[n]还需要先计算M2[n],似乎还是多了一个临时数组。

对序列连续计算平均数和方差相关推荐

  1. python计算平均值标准差和中位数_如何使用python求平均数、方差、中位数

    python求平均数.方差.中位数的例子 CalStatistics.py def getNum(): #获取用户不定长度的输入 nums = [] iNumStr = input("请输入 ...

  2. 用计算机怎么算平均值和方差,《用计算器计算平均数和方差》PPT课件

    <用计算器计算平均数和方差>PPT课件 复习回顾 什么是极差?什么是方差? (1)极差=最大值-最小值. (2)方差就是: 探索新知 练一练:求下列各组数据的平均数和方差 (1)1,3,6 ...

  3. Math:利用学生计算器计算一大堆的平均数和方差思维图文教程(一张图搞定!)

    Math:利用学生计算器计算一大堆的平均数和方差思维图文教程(一张图搞定!) 目录 利用学生计算器计算一大堆的平均数和方差教程 利用学生计算器计算一大堆的平均数和方差教程 我们的学生计算器其实有很多功 ...

  4. 数据分析(排序,数据特征、平均数、方差等,累计统计,相关分析)

    # hanbb # come on!!! import pandas as pd import numpy as np import matplotlib.pyplot as pltdf = pd.D ...

  5. 中位数/平均数/众数/方差/标准差

    中位数 中位数反映一组数据的集中趋势 它不受最大.最小两个极端数值的影响. 部分数据的变动对中位数没有影响,当一组数据中的个别数据变动较大时,常用它来描述这组数据的集中趋势. R语言中: median ...

  6. Qt之算法:平均数、方差、标准差

    文章目录 1.平均数 1.1 算术平均数 1.2 几何平均数 geometric mean 2.方差 (Variation ) 3 .标准差 (Standard Deviation) 4.示例 标准差 ...

  7. r语言找不到cochrane函数_R语言——伍德里奇计量经济导论案例实践 第十二章 时间序列的序列相关和异方差问题...

    在上一章节的复习笔记中,我们介绍了时间序列比较常见的AR模型和随机游走序列.在对时间序列进行回归时,我们和横截面数据一样做了很多假设,但是上一章内容没有回答如何解决误差项之间的序列相关性 (seria ...

  8. python求平均数保留两位小数_python求平均数、方差、中位数的例子

    def getNum(): #获取用户不定长度的输入 nums = [] iNumStr = input("请输入数字(回车退出):") while iNumStr != &quo ...

  9. 数据分析报告——经典统计量的描述性分析:平均数方差、偏度峰度

    描述性分析 一.数据报告 二.变量说明表 三.统计量描述 位置的度量 1. 平均数 2. 中位数和分位数 3. 两者的对比 4. 最大值和最小值 变异程度的度量 1. 方差和标准差 2. 极差和四分位 ...

最新文章

  1. CodeForces 508E Arthur and Brackets 贪心
  2. buu [BJDCTF 2nd]Y1nglish-y1ng
  3. 信息安全与网络安全,你分清了吗?
  4. Bootstrap分页
  5. 【Elasticsearch】估算在 Elasticsearch 中存储文档的成本
  6. AndroidStudio_android使用自己封装的消息队列处理问题_封装LinkedQueue---Android原生开发工作笔记242
  7. 快速接入阿里云应用配置管理工具 轻松开启企业效率新时代
  8. Boost Log : Setting up sinks
  9. 工业级Pass云平台SpringCloudAlibaba综合项目实战(二):解决方案和工作效率
  10. Linux关闭防火墙并设置开机启动/不启动
  11. AutoIt上路03-添加工具栏
  12. docker 安装redis并配置redis.conf
  13. 空指针异常可能出现的原因
  14. 一些好用的 alias 命令
  15. H5分享页面背景音乐及播放视频
  16. 魔兽争霸之PHP设计模式-单件模式[Singleton]
  17. 2022年京东618万券齐发活动入口, 京东618红包领取地址
  18. spring源码分析06-spring配置类解析
  19. 学校计算机ip设置路由器,如何设置计算机的固定IP地址和路由器?
  20. spark 安装单机版和集群

热门文章

  1. chrome浏览器插件开发
  2. Dell服务器使用集成RAID卡
  3. Android 5.1 修改系统默认语言
  4. collect的功能是什么?其底层如何实现的?_用Python实现定时自动化收取蚂蚁森林能量,再也不怕被偷了
  5. spring cloud构建互联网分布式微服务云平台-docker部署spring cloud项目
  6. 01pxc集群的部署
  7. 基于Linux命令行KVM虚拟机的安装配置与基本使用
  8. linux系统的学习经验首篇
  9. 数据结构(C语言实现)勘误
  10. 链表的各种操作实现 链表逆序 链表排序 有序链表归并 链表存在环的判定