使用C++写一个递推计算均方差和标准差的用例
文章目录
- 代码输出
- 关键实现说明
- 1. 类设计
- 2. 算法核心
- 3. 数值稳定性
- 扩展应用场景
- 1. 实时传感器数据处理
- 2. 大规模数据集分块处理
- 总结
以下是用 C++ 实现递推计算均值、方差和标准差的完整示例代码,基于 Welford 算法,适用于实时数据流或大数据场景:
#include <iostream>
#include <cmath>
#include <vector>class RunningStats {
public:RunningStats() : n(0), mean(0.0), S(0.0) {}// 添加新数据点,更新统计量void update(double x) {n += 1;double delta = x - mean;mean += delta / n; // 递推更新均值double delta2 = x - mean;S += delta * delta2; // 递推更新平方和}// 获取当前均值double current_mean() const {return mean;}// 计算样本方差(无偏估计)double variance() const {if (n < 2) return 0.0; // 避免除以0return S / (n - 1);}// 计算标准差double std_dev() const {return std::sqrt(variance());}// 重置统计量void reset() {n = 0;mean = 0.0;S = 0.0;}private:int n; // 数据点数量double mean; // 当前均值double S; // 平方和
};int main() {RunningStats stats;std::vector<double> data_stream = {2.0, 4.0, 6.0, 8.0, 10.0};for (const auto& x : data_stream) {stats.update(x);std::cout << "新增数据: " << x << " | 均值: " << stats.current_mean()<< " | 方差: " << stats.variance()<< " | 标准差: " << stats.std_dev() << std::endl;}return 0;
}
代码输出
新增数据: 2 | 均值: 2 | 方差: 0 | 标准差: 0
新增数据: 4 | 均值: 3 | 方差: 2 | 标准差: 1.41421
新增数据: 6 | 均值: 4 | 方差: 4 | 标准差: 2
新增数据: 8 | 均值: 5 | 方差: 6.66667 | 标准差: 2.58199
新增数据: 10 | 均值: 6 | 方差: 10 | 标准差: 3.16228

关键实现说明
1. 类设计
- 成员变量:
n:已处理的数据点数量。mean:当前均值。S:递推计算的平方和(用于方差计算)。
- 方法:
update(double x):更新统计量。current_mean(),variance(),std_dev():获取当前统计值。reset():重置统计状态。
2. 算法核心
-
递推更新公式:
-
均值更新:

-
平方和更新:

-
-
方差计算(无偏估计):

3. 数值稳定性
- Welford 算法:避免传统方法(如先计算总和再求均值)的浮点数精度损失。
- 处理边界条件:当数据量 ( n < 2 ) 时,方差返回
0.0。
扩展应用场景
1. 实时传感器数据处理
// 模拟实时传感器数据流
RunningStats sensor_stats;
while (true) {double sensor_value = read_sensor_data(); // 假设从传感器读取数据sensor_stats.update(sensor_value);// 每隔100个数据点输出统计量if (sensor_stats.current_count() % 100 == 0) {std::cout << "实时统计 - 均值: " << sensor_stats.current_mean()<< " 标准差: " << sensor_stats.std_dev() << std::endl;}
}
2. 大规模数据集分块处理
// 分块读取文件数据
RunningStats file_stats;
std::ifstream data_file("large_dataset.txt");
double value;
while (data_file >> value) {file_stats.update(value);
}
std::cout << "全局方差: " << file_stats.variance() << std::endl;
总结
- 优势:内存效率高(仅需维护 3 个变量),适合实时或大数据场景。
- 对比传统方法:避免存储全部数据,计算复杂度 Ο(1)。
- 应用范围:金融数据分析、实时监控、科学实验数据处理等。
上一篇:C++中pow函数的作用是什么,如何使用它?
以代码为舟,破浪前行
技术的海洋浩瀚无垠,每一次报错都是潮汐的指引,每一次调试都是对逻辑的雕琢。不要因一时的运行失败而踌躇,因为那些看似无解的异常,终将在你的坚持下化为清晰的注释。
请记住:
- 代码的尽头是哲学,每一段算法都在教你如何拆分复杂;
- 调试的本质是成长,每一个Bug都在锤炼你的耐心与洞察;
- 数据的流动即人生,均值是方向,方差是挑战,而标准差是你跨越不确定的勇气。
无论此刻是山穷水复,还是峰回路转,你手中的键盘始终是书写可能的笔
在循环中迭代自我,在递归中探索边界,在并发的世界里,你永远是自己程序的主线程!
未来已来,放手去闯:
让每一行代码成为星辰的坐标,让每一次编译成功的提示音,化作宇宙对你的喝彩。
你终将抵达那片名为“极致”的彼岸——因为真正的开发者,从不定义极限,只不断超越它。 🌌🚀
(将技术术语与人生隐喻深度融合,用“调试”“递归”“并发”等概念强化身份认同,结尾以宇宙意象激发无限可能,传递“技术即修行”的信念。)

相关文章:
使用C++写一个递推计算均方差和标准差的用例
文章目录 代码输出关键实现说明1. 类设计2. 算法核心3. 数值稳定性 扩展应用场景1. 实时传感器数据处理2. 大规模数据集分块处理 总结 以下是用 C 实现递推计算均值、方差和标准差的完整示例代码,基于 Welford 算法,适用于实时数据流或大数据场景&#x…...
springBoot中不添加依赖 , 手动生成一个token ,并校验token,在统一拦截器中进行校验 (使用简单 , 但是安全性会低一点)
要在 Spring Boot 里实现接口统一拦截并校验 Token,可以借助 Spring 的拦截器机制。下面是具体的实现步骤和代码示例。 1. 创建 Token 工具类 import java.nio.charset.StandardCharsets; import java.security.MessageDigest; import java.security.NoSuchAlgori…...
Vue:单文件组件
Vue:单文件组件 1、 什么是单文件组件? 在传统的Vue开发里,我们接触的是非单文件组件,它们通常被定义在同一个HTML文件中,随着项目规模的扩大,代码会变得杂乱无章,维护起来极为困难。而单文件…...
HarmonyOS NEXT开发实战——HUAWEI DevEco Studio 开发指南
概述 HUAWEI DevEco Studio(以下简称 DevEco Studio)是基于 IntelliJ IDEA Community 开源版本打造的一站式开发平台,专为 HarmonyOS 系统上的应用和元服务(以下简称 应用/元服务)提供高效的开发环境。 作为一款专业…...
IntelliJ IDEA 调试技巧指南
在日常开发中,调试是不可或缺的一部分。掌握调试工具的使用可以让我们更高效地定位和解决问题。本文将介绍一些在 IntelliJ IDEA 中常用的调试技巧,希望能帮助你在开发过程中更顺畅地解决问题。 1. 方法断点:快速定位实现类 方法断点可以帮…...
JavaScript变量声明与DOM操作指南
变量声明 1.变量声明有三个 var let 和 const 我们应该用那个呢? 首先var 先排除,老派写法,问题很多,可以淘汰掉… 2.let or const ? 建议: const 优先,尽量使用const,原因是:…...
嵌入式硬件篇---龙芯UART通信
文章目录 前言一、代码结构解析1. 头文件部分作用 2. 宏定义与全局变量龙芯特性 3. 主函数流程关键点 4. UART发送函数龙芯实现 5. 串口配置函数(set_port)龙芯注意事项 6. GPIO控制函数龙芯GPIO特性 7. PWM控制函数龙芯PWM实现 二、龙芯UART深度解析1. …...
[K!nd4SUS 2025] Crypto
最后一个把周末的补完。这个今天问了小鸡块神终于把一个补上,完成5/6,最后一个网站也上不去不弄了。 Matrices Matrices Matrices 这个是不是叫LWE呀,名词忘了,但意思还是知道。 b a*s e 这里的e是高斯分成,用1000…...
随机变量的不同收敛性
随机变量不同收敛性:一场有趣的趋近之旅😜 一、引言 在概率论这个奇妙的世界里,随机变量就像一群调皮的小精灵🧚 它们的行为充满了不确定性。而今天我们要讲的,就是这些小精灵们的 “趋近大冒险”—— 随机变量的不同…...
JavaScript 函数类型详解:函数声明、函数表达式、箭头函数
在 JavaScript 中,函数是构建逻辑的核心单元。本文将通过 定义对比、核心特性 和 使用场景 三个维度,全面解析以下三种函数类型的区别: 函数声明(Function Declaration)函数表达式(Function Expression&am…...
工作记录 2017-02-04
工作记录 2017-02-04 序号 工作 相关人员 1 修改邮件上的问题。 更新RD服务器。 郝 更新的问题 1、DataExport的设置中去掉了ListPayors,见DataExport\bin\dataexport.xml 2、“IPA/Group Name” 改为 “Insurance Name”。 3、修改了Payment Posted的E…...
Etcd 服务搭建
💢欢迎来到张胤尘的开源技术站 💥开源如江河,汇聚众志成。代码似星辰,照亮行征程。开源精神长,传承永不忘。携手共前行,未来更辉煌💥 文章目录 Etcd 服务搭建预编译的二进制文件安装下载 etcd 的…...
【C++】stack和queue的使用及模拟实现(含deque的简单介绍)
文章目录 前言一、deque的简单介绍1.引入deque的初衷2.deque的结构3.为什么选择deque作为stack和queue的底层默认容器 二、stack1.stack的介绍2.stack的使用3.stack的模拟实现 三、queue1.queue的介绍2.queue的使用3.queue的模拟实现 前言 一、deque的简单介绍(引入…...
Spring Boot - Spring Boot 静态资源映射(默认静态资源映射、自定义静态资源映射)
一、静态资源映射 在 Spring Boot 中,静态资源的映射是指将特定的 URL 路径与静态资源关联起来 静态资源有例如,HTML、CSS、JS、图片等 这使得客户端可以通过 URL 路径访问这些资源 二、默认静态资源映射 概述 Spring Boot 默认会将以下目录中的文件…...
MySQL原理:逻辑架构
目的:了解 SQL执行流程 以及 MySQL 内部架构,每个零件具体负责做什么 理解整体架构分别有什么模块每个模块具体做什么 目录 1 服务器处理客户端请求 1.1 MySQL 服务器端逻辑架构说明 2 Connectors 3 第一层:连接层 3.1 数据库连接池(Conn…...
ora-600 ktugct: corruption detected---惜分飞
接手一个oracle 21c的库恢复请求,通过Oracle数据库异常恢复检查脚本(Oracle Database Recovery Check)脚本检测之后,发现undo文件offline之后,做了resetlogs操作,导致该文件目前处于WRONG RESETLOGS状态 尝试恢复数据库ORA-16433错误 SQL> recover datafile 1; ORA-00283:…...
Houdini :《哪吒2》神话与科技碰撞的创新之旅
《哪吒2》(即《哪吒之魔童闹海》)截止至今日,荣登全球票房榜第五。根据猫眼专业版数据,截至2025年3月15日,《哪吒2》全球累计票房(含预售及海外)超过150.19亿元,超越《星球大战&…...
flink 写入es的依赖导入问题(踩坑记录)
flink 写入es的依赖导入问题(踩坑记录) ps:可能只是flink低版本才会有这个问题 1. 按照官网的导入方式: 2. 你会在运行sql-client的时候完美得到一个错误: Exception in thread "main" org.apache.flink.table.client.SqlClientEx…...
PCL 高斯函数拟合(正太分布)
文章目录 一、简介二、实现代码三、实现效果一、简介 类似于之前最小二乘法的做法,我们需要先确定目标函数: 通过最小二乘法,找到使预测值与实际数据残差平方和最小的参数: 不过由于这是一个非线性最小二乘问题,因此这里无法使用矩阵的形式之间求解它的解析解了,因此这里…...
深度革命:ResNet 如何用 “残差连接“ 颠覆深度学习
一文快速了解 ResNet创新点 在深度学习的历史长河中,2015年或许是最具突破性的一年。这一年,微软亚洲研究院的何恺明团队带着名为ResNet(残差网络)的模型横空出世,在ImageNet图像分类竞赛中以3.57%的错误率夺冠&#…...
Java基础与集合
参考 Java基础知识详解:从面向对象到异常处理-CSDN博客 2024年 Java 面试八股文(20w字)_java面试八股文-CSDN博客 基础知识 java概述 什么是java? java是一种面向对象的编程语言 java特点 面向对象(继承&#…...
【Python 算法零基础 1.线性枚举】
我装作漠视一切,以为这样就可以不在乎 —— 25.3.17 一、线性枚举的基本概念 1.时间复杂度 线性枚举的时间复杂度为 O(nm),其中 n是线性表的长度。m 是每次操作的量级,对于求最大值和求和来说,因为操作比较简单,所以 …...
深入理解 Linux 的 top 命令:实时监控系统性能
在 Linux 系统管理和性能优化中,top 命令是一个不可或缺的工具。它可以实时显示系统的进程信息和资源使用情况,帮助管理员快速定位性能瓶颈。本文将详细介绍 top 命令的输出内容及其使用方法,帮助你更好地掌握系统性能监控。 一、top 命令简介 top 是一个动态显示系统状态的…...
003 SpringCloud整合-LogStash安装及ELK日志收集
SpringCloud整合-LogStash安装及ELK日志收集 文章目录 SpringCloud整合-LogStash安装及ELK日志收集1.安装ElasticSearch和kibana2.Docker安装logstash1.拉取docker镜像2.创建外部挂载目录3.拷贝容器内部文件到宿主机4.修改外部挂载文件5.运行docker容器 3.整合kibana1.进入kiba…...
AI预测体彩排3新模型百十个定位预测+胆码预测+杀和尾+杀和值2025年3月18日第22弹
前面由于工作原因停更了很长时间,停更期间很多彩友一直私信我何时恢复发布每日预测,目前手头上的项目已经基本收尾,接下来恢复发布。当然,也有很多朋友一直咨询3D超级助手开发的进度,在这里统一回复下。 由于本人既精…...
数据结构入门(1)——算法复杂度
目录 一、前言 二、数据结构 2.1数据结构的概念 2.2数据结构的组成 2.3算法 三、oj题引进 四、复杂度 4.1复杂度的概念 4.2大O渐进表示法 4.3时间复杂度 4.4时间复杂度计算示例 4.4.1示例1 4.4.2示例2 4.4.3示例3 4.4.4示例4 4.4.5示例5 4.4.6示例6 4.4.7示例7 4.4.8示例8 4.5空…...
JavaScript基础-DOM 简介
在现代Web开发中,JavaScript与HTML和CSS一起构成了网页的核心技术。而在这三者之中,DOM(Document Object Model,文档对象模型)作为浏览器处理网页内容的一种接口,扮演着至关重要的角色。通过DOM,…...
VS Code + Git 分支操作指南(附流程图)
VS Code + Git 分支操作指南(附流程图) 本指南将手把手教你如何在 Visual Studio Code (VS Code) 中使用 Git 进行项目开发管理,配合标准分支模型(main、develop、feature/* 等),并附上直观的流程图,适合新手快速上手! 📌 前置准备 安装 Git安装 VS Code安装 VS Cod…...
Oracle ASM Failgroup故障组
Oracle ASM Failgroup故障组 1. 故障组的核心作用2. 故障组的配置规则3. 故障组的设计最佳实践4. 故障组的实际示例场景1:普通冗余(2个故障组)场景2:高冗余(3个故障组,跨数据中心) 关键注意事项…...
【最新版】智慧小区物业管理小程序源码+uniapp全开源
一.系统介绍 智慧小区物业管理小程序,包含小区物业缴费、房产管理、在线报修、业主活动报名、在线商城等功能。为物业量身打造的智慧小区运营管理系统,贴合物业工作场景,轻松提高物业费用收缴率,更有功能模块个性化组合,助力物业节约成本高效运营。 二.搭建环境 系统环…...
