首页/新闻资讯/正文详情

C++代码实现MATLAB中的geomean函数功能

发布时间:2026/11/4 2:25:09 来源:云帆数科 栏目:资讯中心
C++代码实现MATLAB中的geomean函数功能
#includecmath#includevector#includestdexcept#includelimits#includeiostream#includeiomanip// 计算一组 double 的几何平均数// 行为对齐 MATLAB geomean:// - 任一元素为 0 → 返回 0// - 任一元素为负 → 返回 NaN// - 空输入 → 返回 NaNdoublegeomean_vector(conststd::vectordoublex){if(x.empty()){returnstd::numeric_limitsdouble::quiet_NaN();}doublesum_log0.0;for(doublev:x){if(v0.0){return0.0;}if(v0.0){returnstd::numeric_limitsdouble::quiet_NaN();}sum_logstd::log(v);}returnstd::exp(sum_log/static_castdouble(x.size()));}// 矩阵按列求几何平均数行优先存储// data: rows × cols 的矩阵按行优先展平// 返回长度为 cols 的 vector对应每一列的几何平均数std::vectordoublegeomean_columns(conststd::vectordoubledata,std::size_t rows,std::size_t cols){if(data.size()!rows*cols||rows0||cols0){throwstd::invalid_argument(维度不匹配或为空);}std::vectordoubleresult(cols);for(std::size_t j0;jcols;j){doublesum_log0.0;boolhas_zerofalse;boolhas_negativefalse;for(std::size_t i0;irows;i){doublevdata[i*colsj];if(v0.0){has_zerotrue;break;}if(v0.0){has_negativetrue;break;}sum_logstd::log(v);}if(has_zero){result[j]0.0;}elseif(has_negative){result[j]std::numeric_limitsdouble::quiet_NaN();}else{result[j]std::exp(sum_log/static_castdouble(rows));}}returnresult;}// 所有元素的几何平均数对应 geomean(X, all)doublegeomean_all(conststd::vectordoubledata){returngeomean_vector(data);}// data: rows × cols 矩阵列优先存储data[r c * rows]// dim 1: 沿列方向返回长度 cols// dim 2: 沿行方向返回长度 rowsstd::vectordoublegeomean_dim(conststd::vectordoubledata,std::size_t rows,std::size_t cols,intdim){if(data.size()!rows*cols){throwstd::invalid_argument(数据长度与维度不符);}if(dim1){std::vectordoubleresult(cols);for(std::size_t c0;ccols;c){doublesum_log0.0;boolzerofalse,negfalse;for(std::size_t r0;rrows;r){doublevdata[rc*rows];if(v0.0){zerotrue;break;}if(v0.0){negtrue;break;}sum_logstd::log(v);}result[c]zero?0.0:neg?std::numeric_limitsdouble::quiet_NaN():std::exp(sum_log/static_castdouble(rows));}returnresult;}if(dim2){std::vectordoubleresult(rows);for(std::size_t r0;rrows;r){doublesum_log0.0;boolzerofalse,negfalse;for(std::size_t c0;ccols;c){doublevdata[rc*rows];if(v0.0){zerotrue;break;}if(v0.0){negtrue;break;}sum_logstd::log(v);}result[r]zero?0.0:neg?std::numeric_limitsdouble::quiet_NaN():std::exp(sum_log/static_castdouble(cols));}returnresult;}throwstd::invalid_argument(dim 仅支持 1 或 2);}intmain(){std::coutstd::setprecision(10);// 向量: [1, 2, 3, 4, 5, 6]std::vectordoublev{1,2,3,4,5,6};std::coutgeomean_vector geomean_vector(v)\n;// 含 0std::vectordoublev0{1,0,3};std::cout含0 geomean_vector(v0)\n;// 含负值std::vectordoublevn{1,-2,3};doublegngeomean_vector(vn);std::cout含负 ;if(std::isnan(gn)){std::coutNaN;}else{std::coutgn;}std::cout\n;// 矩阵按列 (2×3, 行优先)std::vectordoublem{1,2,3,4,5,6};autocolsgeomean_columns(m,2,3);std::cout矩阵按列 ;for(std::size_t j0;jcols.size();j){if(j0){std::cout ;}std::coutcols[j];}std::cout\n;return0;}

相关推荐

项目实战:出入库管理系统
项目实战:出入库管理系统

前言这一篇进入项目实战:一个完整的出入库管理系统。这个项目把前面学的 Spring Boot、MyBatis、Vue 3、Element Plus、Axios 全部串起来“请做好准备,全军出击”一、出入库业务理解(完整业务流程)1.1 什么是出入库管理&#xff1… · 2026/11/4 2:25:09

Seata 分布式事务核心原理详解(TC/TM/RM、AT/XA/TCC/Saga、锁机制)
Seata 分布式事务核心原理详解(TC/TM/RM、AT/XA/TCC/Saga、锁机制)

前言在微服务架构下,业务会拆分到多个独立服务,跨服务操作就会遇到分布式事务问题,保证多个微服务的数据一致性。Seata 是目前主流的分布式事务框架,本文重点拆解 Seata 的三大核心组件 TC/TM/RM,AT模式完整执行时序、… · 2026/11/4 2:25:09

Java编程核心特性与应用解析
Java编程核心特性与应用解析

拿java来做例子来说, 点out点是将会内容输出到屏幕上面, 并且会换行, 而带括号的点out点是专门用来打印出一个空白行的, 点out这整句话的主要作用就是为了输出一些信息, 这里面包括了变量的值或者字符串的值之类的东西, 说得更简单一点它就是用来显示的, 因此并不是说非得要总用… · 2026/11/4 2:25:09

MySQL四大核心SQL语句实战与优化指南
MySQL四大核心SQL语句实战与优化指南

1. MySQL四大核心SQL语句实战指南 作为一名从业多年的数据库工程师,我深知SQL语句是每个开发者必须掌握的技能。今天,我将通过学生管理系统的实战案例,带大家深入理解MySQL中最核心的四大SQL语句:SELECT、INSERT、UPDATE和DELETE。… · 2026/11/4 8:21:56

ArkTS与TypeScript的核心差异及性能优化实践
ArkTS与TypeScript的核心差异及性能优化实践

1. ArkTS与TypeScript的本质差异:从自由到约束的设计哲学 第一次接触ArkTS时,很多开发者都会产生一个误解:这不就是加了点限制的TypeScript吗?但经过多个鸿蒙项目的实战后,我发现这两种语言在底层设计理念上存在根本性… · 2026/11/4 8:21:56

Windows平台OpenClaw自动化测试工具安装与实战指南
Windows平台OpenClaw自动化测试工具安装与实战指南

1. Windows平台安装OpenClaw的核心价值解析 作为一款开源的自动化测试工具,OpenClaw在Windows环境下的部署能为开发者和测试团队带来显著效率提升。我在多个跨平台项目中实测发现,相比其他测试框架,OpenClaw在Windows环境下的独特优势主要体现… · 2026/11/4 8:21:56

Windows开发者必备:OpenClaw高效开发工具全解析
Windows开发者必备:OpenClaw高效开发工具全解析

1. 为什么Windows用户需要关注OpenClaw在Windows平台上寻找高效开发工具时,OpenClaw正逐渐成为技术圈内的热门选择。作为一名长期在Windows环境下工作的全栈工程师,我第一次接触OpenClaw就被它的跨平台兼容性所吸引。不同于传统工具链的臃肿配置&#xf… · 2026/11/4 8:21:56

Claude命令行Token配置:三类Token、参数调优与成本排查
Claude命令行Token配置:三类Token、参数调优与成本排查

1. Token 这件事,先分清三种再谈配置 很多人第一次打开 Claude 命令行(CLI)的配置文档时,会以为"Token 配置"就是填一个密钥字符串,填完回车就完事。真跑起来才发现,报错是它、账单是它、输出被截… · 2026/11/4 8:21:56

从冰山模型到数由空间:数据要素化流通基础设施解读
从冰山模型到数由空间:数据要素化流通基础设施解读

简介:《数据要素化新阶段的数据基础设施白皮书》面向数据要素、数据流通与数据基础设施领域的研究者、政策制定者及企业实践者,系统梳理国家数据基础设施的理论、政策与实践路径。内容围绕数据要素化新阶段的新要素、新空间、新设施、新产业与新要求展开… · 2026/11/4 8:20:54

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38

AI辅助技术栈评估:提升研发决策效率60%
AI辅助技术栈评估:提升研发决策效率60%

1. 项目背景与核心价值技术决策一直是研发团队面临的重大挑战。随着技术生态的快速演进,技术栈的选择、维护和迭代变得愈发复杂。我们团队在过去两年里,先后经历了三次重大技术栈迁移,每次都需要投入大量人力进行技术评估和风险分析。直到去年… · 2026/11/4 0:00:17

从生成Token到直接决策:Jev如何重塑AI Agent工程实践
从生成Token到直接决策:Jev如何重塑AI Agent工程实践

1. 从"生成文字"到"拍板决策":Jev 到底在解决什么问题大多数人第一次接触大模型,脑子里建立的模型是"输入问题、输出文字"。你问它今天天气怎么样,它给你一段描述;你让它写个周报,它给你… · 2026/11/4 0:00:17

32G统一内存跑大模型:内存账、TPS实测与端云分流
32G统一内存跑大模型:内存账、TPS实测与端云分流

想在一台 32G 统一内存的小主机上把大模型跑成"日常可用",这件事我前后折腾了小半年。标题里说的这台 Mac mini M6,是我们这次讨论的目标平台,具体到手规格以实物为准;但下面这套推算方法和实测思路,对任何统… · 2026/11/4 0:00:17

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码