对序列连续计算平均数和方差
连续计算平均数和方差
问题:对数列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∑nx[i]2v[n]=n∑1nx[i]2+n∗m[n]2−2∗m[n]∗∑1nx[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−1x[i]+x[n]=n−1∑1n−1x[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∑nx[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],似乎还是多了一个临时数组。
对序列连续计算平均数和方差相关推荐
- python计算平均值标准差和中位数_如何使用python求平均数、方差、中位数
python求平均数.方差.中位数的例子 CalStatistics.py def getNum(): #获取用户不定长度的输入 nums = [] iNumStr = input("请输入 ...
- 用计算机怎么算平均值和方差,《用计算器计算平均数和方差》PPT课件
<用计算器计算平均数和方差>PPT课件 复习回顾 什么是极差?什么是方差? (1)极差=最大值-最小值. (2)方差就是: 探索新知 练一练:求下列各组数据的平均数和方差 (1)1,3,6 ...
- Math:利用学生计算器计算一大堆的平均数和方差思维图文教程(一张图搞定!)
Math:利用学生计算器计算一大堆的平均数和方差思维图文教程(一张图搞定!) 目录 利用学生计算器计算一大堆的平均数和方差教程 利用学生计算器计算一大堆的平均数和方差教程 我们的学生计算器其实有很多功 ...
- 数据分析(排序,数据特征、平均数、方差等,累计统计,相关分析)
# hanbb # come on!!! import pandas as pd import numpy as np import matplotlib.pyplot as pltdf = pd.D ...
- 中位数/平均数/众数/方差/标准差
中位数 中位数反映一组数据的集中趋势 它不受最大.最小两个极端数值的影响. 部分数据的变动对中位数没有影响,当一组数据中的个别数据变动较大时,常用它来描述这组数据的集中趋势. R语言中: median ...
- Qt之算法:平均数、方差、标准差
文章目录 1.平均数 1.1 算术平均数 1.2 几何平均数 geometric mean 2.方差 (Variation ) 3 .标准差 (Standard Deviation) 4.示例 标准差 ...
- r语言找不到cochrane函数_R语言——伍德里奇计量经济导论案例实践 第十二章 时间序列的序列相关和异方差问题...
在上一章节的复习笔记中,我们介绍了时间序列比较常见的AR模型和随机游走序列.在对时间序列进行回归时,我们和横截面数据一样做了很多假设,但是上一章内容没有回答如何解决误差项之间的序列相关性 (seria ...
- python求平均数保留两位小数_python求平均数、方差、中位数的例子
def getNum(): #获取用户不定长度的输入 nums = [] iNumStr = input("请输入数字(回车退出):") while iNumStr != &quo ...
- 数据分析报告——经典统计量的描述性分析:平均数方差、偏度峰度
描述性分析 一.数据报告 二.变量说明表 三.统计量描述 位置的度量 1. 平均数 2. 中位数和分位数 3. 两者的对比 4. 最大值和最小值 变异程度的度量 1. 方差和标准差 2. 极差和四分位 ...
最新文章
- CodeForces 508E Arthur and Brackets 贪心
- buu [BJDCTF 2nd]Y1nglish-y1ng
- 信息安全与网络安全,你分清了吗?
- Bootstrap分页
- 【Elasticsearch】估算在 Elasticsearch 中存储文档的成本
- AndroidStudio_android使用自己封装的消息队列处理问题_封装LinkedQueue---Android原生开发工作笔记242
- 快速接入阿里云应用配置管理工具 轻松开启企业效率新时代
- Boost Log : Setting up sinks
- 工业级Pass云平台SpringCloudAlibaba综合项目实战(二):解决方案和工作效率
- Linux关闭防火墙并设置开机启动/不启动
- AutoIt上路03-添加工具栏
- docker 安装redis并配置redis.conf
- 空指针异常可能出现的原因
- 一些好用的 alias 命令
- H5分享页面背景音乐及播放视频
- 魔兽争霸之PHP设计模式-单件模式[Singleton]
- 2022年京东618万券齐发活动入口, 京东618红包领取地址
- spring源码分析06-spring配置类解析
- 学校计算机ip设置路由器,如何设置计算机的固定IP地址和路由器?
- spark 安装单机版和集群