gma 1.x 气候气象指数计算源代码(分享)

本模块的主要内建子模块如下:

如何获得完整代码: 回复博主 或者 留言/私信 。
注意:本代码完全开源,可随意修改使用。 但如果您的成果使用或参考了本段代码,给予一定的引用说明(非强制),包括但不限于:
- 1.作者:洛
- 2.网站:gma.luosgeo.com
- 3.PyPI:https://pypi.org/project/gma/
- 3.GitHub:https://github.com/LiChongrui
其中:
clindex:气候指标计算函数
cmana:气候诊断函数
et0:蒸散计算函数
static:气候常量
utils:通用工具
示例代:1:
from ..core.arraypro import *
from .utils import *#################################### 累积概率计算
def GammaCP(Data, Axis):'''gamma 分布累积概率'''if np.nanmin(Data) < 0:Data = Data + np.abs(np.nanmin(Data)) * 2 # Data = Data + 1000PF = ParameterFitting(Data, Axis = Axis)Data = PF.DataAxis = PF.Axis# 计算 0 值概率并填充 0 值 为 NaNZeros = (Data == 0).sum(axis = Axis, keepdims = True)ProbabilitiesOfZero = Zeros / Data.shape[Axis]Data[Data == 0] = np.nanAlphas, Betas = ParameterFitting(Data, Axis = Axis).MLE()# 使用gamma CDF 查找 gamma 概率值GammaProbabilities = stats.gamma.cdf(Data, a = Alphas, scale = Betas)Probabilities = ProbabilitiesOfZero + (1 - ProbabilitiesOfZero) * GammaProbabilitiesreturn Probabilities def LogLogisticCP(Data, Axis):'''Log-Logistic 分布累积概率'''PF = ParameterFitting(Data, Axis)Alpha, Beta, Gamma1 = PF.LMoment()Probabilities = 1 / (1 + (Alpha / (PF.Data - Gamma1)) ** Beta)# 由于 scipy 对 non 值处理过于简单,这里不使用 scipy 的函数# Probabilities = stats.fisk.cdf(PF.Data, Beta, loc = Gamma1, scale = Alpha)return Probabilitiesdef Pearson3CP(Data, Axis):'''pearson III 分布累积概率'''if np.nanmin(Data) < 0:Data = Data + np.abs(np.nanmin(Data)) * 2 PF = ParameterFitting(Data, Axis)Data = PF.DataAxis = PF.Axis Loc, Scale, Skew = PF.LMoment2()Alpha = 4.0 / (Skew ** 2)MINPossible = Loc - ((Alpha * Scale * Skew) / 2.0)Zeros = (Data == 0).sum(axis = Axis, keepdims = True)ProbabilitiesOfZero = Zeros / Data.shape[Axis]Probabilities = stats.pearson3.cdf(Data, Skew, Loc, Scale)Probabilities[(Data < 0.0005) & (ProbabilitiesOfZero > 0.0)] = 0.0Probabilities[(Data < 0.0005) & (ProbabilitiesOfZero <= 0.0)] = 0.0005Probabilities[(Data <= MINPossible) & (Skew >= 0)] = 0.0005Probabilities[(Data >= MINPossible) & (Skew < 0)] = 0.9995Probabilities = ProbabilitiesOfZero + (1.0 - ProbabilitiesOfZero) * Probabilitiesreturn Probabilitiesdef _ReshapeAndExtend(Data, Axis, Periodicity):'''更改输入数据维度为 (Axis / Periodicity, Periodicity, N),并补充末尾缺失数据'''# 交换设置轴到 0 if Data.ndim > 1:Data = np.swapaxes(Data, 0, Axis)S = Data.shapeS0, S1 = S[0], np.prod(S[1:], dtype = int)Data = Data.reshape((S0, S1))else:Data = np.expand_dims(Data, -1)# 填充不足 Data.shape[0] / PeriodicityB = Data.shape[0] % PeriodicityPW = 0 if B == 0 else Periodicity - BData = np.pad(Data, ((0, PW), (0,0)), mode = "constant", constant_values = np.nan)# 更改为目标维度(3维)PeriodicityTimes = Data.shape[0] // Periodicity return Data.reshape(PeriodicityTimes, Periodicity, Data.shape[1])def _RestoreReshapeAndExtend(Data, Axis, Shape):'''对 _ReshapeAndExtend 修改的维度和数据进行还原'''# 还原为原始维度(2维)Data = Data.reshape(np.prod(Data.shape[:2]), *Data.shape[2:])# 去除尾部填充值Data = Data[:Shape[Axis]]# 还原到初始状态SHP = list(Shape)SHP.pop(Axis)SHP = [Shape[Axis]] + SHPData = Data.reshape(SHP)Data = np.swapaxes(Data, Axis, 0)return Data############### 不同的计算方式
def _Fit(WBInScale, Periodicity, Distribution):'''计算标准化指数'''# 1.计算累积概率Probabilities = eval(f'{Distribution}CP')(WBInScale, 0)if Periodicity == 1:Probabilities = np.expand_dims(Probabilities, 1)# 2.生成结果OutInScale = stats.norm.ppf(Probabilities)return OutInScaledef _API(WBInScale, Axis):'''计算距平指数'''# 1.计算平均值或趋势值Mean = np.nanmean(WBInScale, axis = Axis, dtype = np.float64, keepdims = True)# 4.生成结果OutInScale = (WBInScale - Mean) / Meanreturn OutInScale############### 计算结果
def _Compute(Data, Axis, Scale, Periodicity, Distribution):'''自动计算''' Periodicity = ValueType(Periodicity, 'pint')# 0.数据准备DP = DataPreparation(Data, Axis) Data = DP.DataSHP = Data.shapeAxis = DP.Axis# 1.计算尺度WBInScale = DP.SumScale(Scale)if not (SHP[Axis] > Periodicity) and (SHP[Axis] > Scale):return np.full(WBInScale.shape, np.nan)# 2.更改输入数据维度为 (Axis / Periodicity, Periodicity, N)WBInScale = _ReshapeAndExtend(WBInScale, Axis, Periodicity)# 3.生成结果if Distribution == 'API':OutInScale = _API(WBInScale, Axis)else:OutInScale = _Fit(WBInScale, Periodicity, Distribution)# 4.还原数据OutInScale = _RestoreReshapeAndExtend(OutInScale, Axis, SHP) return OutInScale
示例代码2:
#################################### SPEI
def SPEI(PRE, PET, Axis = None, Scale = 1, Periodicity = 12, Distribution = 'LogLogistic'):'''计算SPEI'''Distribution = GetDistribution(Distribution)PRE, PET = INITArray(PRE, PET)WB = np.subtract(PRE, PET, dtype = PRE.dtype)SPEIInScale = _Compute(WB, Axis, Scale, Periodicity, Distribution)return SPEIInScale#################################### SPI
def SPI(PRE, Axis = None, Scale = 1, Periodicity = 12, Distribution = 'Gamma'):'''计算 SPI'''Distribution = GetDistribution(Distribution)SPIInScale = _Compute(PRE, Axis, Scale, Periodicity, Distribution)return SPIInScale#################################### PAP
def PAP(PRE, Axis = None, Scale = 1, Periodicity = 12):'''降水距平百分率'''PAPInScale = _Compute(PRE, Axis, Scale, Periodicity, 'API') return PAPInScale
相关文章:
gma 1.x 气候气象指数计算源代码(分享)
本模块的主要内建子模块如下: 如何获得完整代码: 回复博主 或者 留言/私信 。 注意:本代码完全开源,可随意修改使用。 但如果您的成果使用或参考了本段代码,给予一定的引用说明(非强制)…...
酒水展示预约小程序的效果如何
酒的需求度非常高,各种品牌、海量经销商组成了庞大市场,而在实际经营中,酒水品牌、经销商、门店经营者等环节往往也面临着品牌传播拓客引流难、产品展示预约订购难、营销难、销售渠道单一等痛点。 那么商家们应该怎样解决呢? 可以…...
蓝桥杯练习
即约分数 题目 思路 遍历所有的x,y,判断x/y是不是即越约分数。 代码 #include <iostream> using namespace std; int gcd(int x,int y) {int r;while(y!0){rx%y;xy;yr;}return x; } int main() {// 请在此输入您的代码int sum4039;//1/y和x/1都…...
python设计模式11:观察者模式
观察者模式 单个对此(发布者,也称为主体或是可观察对象)和一个或是多个对象(订阅者,也称为观察者)之间的发布-订阅关系。增加发布者和订阅这个之间解耦,使得在运行时添加、删除订阅者变得容易。…...
STM32 GPIO 描述
一、GPIO功能描述 每个GPIO端口有两个32位配置寄存器(GPIOx_CRL,GPIOx_CRH) ,两个32位数据寄存器 (GPIOx_IDR和GPIOx_ODR) ,一个32位置位/复位寄存器(GPIOx_BSRR),一个16位复位寄存器(GPIOx_BRR)和一个32位锁定寄存器(GPIOx_LCKR…...
lerna在项目中使用
1. 检查lerna.json文件中的版本号是否正确,确保版本号与安装的lerna版本一致; 2. 检查package.json文件中的依赖是否正确,确保依赖的版本号与安装的lerna版本一致; 3. 检查node_modules文件夹是否存在,如果存在&…...
java智能在线考试系统源码 基于SpringBoot+Vue开发
java智能在线考试系统源码 基于SpringBootVue开发 环境介绍 语言环境:Java: jdk1.8 数据库:Mysql: mysql5.7 应用服务器:Tomcat: tomcat8.5.31 开发工具:IDEA或eclipse 开发技术:SpringbootVue 项目简介&…...
防逆流系统中防逆流电表的正确安装位置-安科瑞黄安南
随着光伏行业的发展,部分地区村级变压器及工业用电变压器容量与光伏项目的装机容量处于饱和。电网公司要求对后建的光伏并网系统为不可逆流发电系统,指光伏并网系统所发生的电由本地负载消耗,多余的电不允许通过低压配电变压器向上级电网逆向…...
Hello Qt!
目录 1. 什么是Qt 2. Qt中的模块 3. 下载安装 4. QtCreator 4. Hello Qt 解释 .pro 解释 main.cpp 解释 mainwindow.ui 解释 mainwindow.h 解释 mainwindow.cpp 5. Qt 中的窗口类 5.1 基础窗口类 5.2 窗口的显示 6. Qt 的坐标体系 7. 内存回收 1. 什么是Qt 是一…...
pytorch加载的cifar10数据集,到底有没有经过归一化
pytorch加载cifar10的归一化 pytorch怎么加载cifar10数据集torchvision.datasets.CIFAR10transforms.Normalize()进行归一化到底在哪里起作用?【CIFAR10源码分析】 torchvision.datasets加载的数据集搭配Dataloader使用model.train()和model.eval() pytorch怎么加载…...
Day1 ARM基础
【ARM课程认知】 1.ARM课程的作用 承上启下 基础授课阶段:c语言、数据结构、linux嵌入式应用层课程:IO、进程线程、网络编程嵌入式底层课程:ARM体系结构、系统移植、linux设备驱动c/QT 2.ARM课程需要掌握的内容 自己能够实现简单的汇编编…...
ns3入门基础教程
ns3入门基础教程 文章目录 ns3入门基础教程ns环境配置测试ns3环境ns3简单案例 ns环境配置 官方网站:https://www.nsnam.org/releases/ 代码仓库:https://gitlab.com/nsnam/ns-3-dev 如果安装遇到问题,可以参考以下博文: https://…...
计算机视觉
目录 一、图像处理 main denoise 二、Harris角点检测 三、Hough变换直线检测 四、直方图显著性检测 五、人脸识别 六、kmeans import 函数 kmeanstext 七、神经网络 常用函数: imread----------读取图像 imshow---------显示图像 rgb2hsv---------RGB转…...
NSSCTF第10页(3)
[LitCTF 2023]彩蛋 第一题: LitCTF{First_t0_The_k3y! (1/?) 第三题: <?php // 第三个彩蛋!(看过头号玩家么?) // R3ady_Pl4yer_000ne (3/?) ?> 第六题: wow 你找到了第二个彩蛋哦~ _S0_ne3t? (2/?) 第七题…...
MySQL性能分析工具的使用
1. 统计SQL的查询成本:last_query_cost SHOW STATUS LIKE last_query_cost; 使用场景:它对于比较开销是非常有用的,特别是我们有好几种查询方式可选的时候。 SQL 查询是一个动态的过程,从页加载的角度来看,我们可以得到…...
Uniapp使用AES128加解密16进制
在对接低功耗蓝牙时,我们需要对蓝牙传输数据进行加解密,由于我们对接的命令是16进制,如5500020101aa00,每个16进制表示特定的含义,所以直接对16进制加解密 import CryptoJS from crypto-js// AES128 加密函数 functio…...
C++基础——类与对象
1 概述 C是面向对象的语言,面向对象语言三大特性:封装、继承、多态。 C将万事万物抽象为对象,对象上有其属性和行为。 2 封装 2.1 封装的意义 封装是面向对象的三大特性之一,封装将属性和行为作为一个整体,对属性和…...
人工智能-卷积神经网络
从全连接层到卷积 我们之前讨论的多层感知机十分适合处理表格数据,其中行对应样本,列对应特征。 对于表格数据,我们寻找的模式可能涉及特征之间的交互,但是我们不能预先假设任何与特征交互相关的先验结构。 此时,多层感…...
MySQL的event的使用方法
MySQL的event的使用方法 一、事件定时策略 1、查看event事件开启状态 SHOW VARIABLES LIKE event_scheduler;如图,Value值 ON:打开,OFF:关闭。 2、设置event事件打开 SET GLOBAL event_scheduler ON;如果MySQL重启了&#x…...
Leetcode Daily Challenge 1845. Seat Reservation Manager
1845. Seat Reservation Manager 题目要求:初始化一个SeatManager类包括默认构造函数和类函数,所有的seat初始化为true。reverse函数返回最小的true,然后把这个编号的椅子赋值为false。unreverse(seatNumber)函数把编号为seatNumber的椅子恢…...
JavaSec-RCE
简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性,…...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...
【决胜公务员考试】求职OMG——见面课测验1
2025最新版!!!6.8截至答题,大家注意呀! 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:( B ) A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...
IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...
【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...
Xen Server服务器释放磁盘空间
disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...
MySQL JOIN 表过多的优化思路
当 MySQL 查询涉及大量表 JOIN 时,性能会显著下降。以下是优化思路和简易实现方法: 一、核心优化思路 减少 JOIN 数量 数据冗余:添加必要的冗余字段(如订单表直接存储用户名)合并表:将频繁关联的小表合并成…...
SpringAI实战:ChatModel智能对话全解
一、引言:Spring AI 与 Chat Model 的核心价值 🚀 在 Java 生态中集成大模型能力,Spring AI 提供了高效的解决方案 🤖。其中 Chat Model 作为核心交互组件,通过标准化接口简化了与大语言模型(LLM࿰…...
自然语言处理——文本分类
文本分类 传统机器学习方法文本表示向量空间模型 特征选择文档频率互信息信息增益(IG) 分类器设计贝叶斯理论:线性判别函数 文本分类性能评估P-R曲线ROC曲线 将文本文档或句子分类为预定义的类或类别, 有单标签多类别文本分类和多…...
