当前位置: 首页 > news >正文

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 气候气象指数计算源代码(分享)

本模块的主要内建子模块如下&#xff1a; 如何获得完整代码&#xff1a; 回复博主 或者 留言/私信 。 注意&#xff1a;本代码完全开源&#xff0c;可随意修改使用。 但如果您的成果使用或参考了本段代码&#xff0c;给予一定的引用说明&#xff08;非强制&#xff09;&#xf…...

酒水展示预约小程序的效果如何

酒的需求度非常高&#xff0c;各种品牌、海量经销商组成了庞大市场&#xff0c;而在实际经营中&#xff0c;酒水品牌、经销商、门店经营者等环节往往也面临着品牌传播拓客引流难、产品展示预约订购难、营销难、销售渠道单一等痛点。 那么商家们应该怎样解决呢&#xff1f; 可以…...

蓝桥杯练习

即约分数 题目 思路 遍历所有的x&#xff0c;y&#xff0c;判断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:观察者模式

观察者模式 单个对此&#xff08;发布者&#xff0c;也称为主体或是可观察对象&#xff09;和一个或是多个对象&#xff08;订阅者&#xff0c;也称为观察者&#xff09;之间的发布-订阅关系。增加发布者和订阅这个之间解耦&#xff0c;使得在运行时添加、删除订阅者变得容易。…...

STM32 GPIO 描述

一、GPIO功能描述 每个GPIO端口有两个32位配置寄存器(GPIOx_CRL&#xff0c;GPIOx_CRH) &#xff0c;两个32位数据寄存器 (GPIOx_IDR和GPIOx_ODR) &#xff0c;一个32位置位/复位寄存器(GPIOx_BSRR)&#xff0c;一个16位复位寄存器(GPIOx_BRR)和一个32位锁定寄存器(GPIOx_LCKR…...

lerna在项目中使用

1. 检查lerna.json文件中的版本号是否正确&#xff0c;确保版本号与安装的lerna版本一致&#xff1b; 2. 检查package.json文件中的依赖是否正确&#xff0c;确保依赖的版本号与安装的lerna版本一致&#xff1b; 3. 检查node_modules文件夹是否存在&#xff0c;如果存在&…...

java智能在线考试系统源码 基于SpringBoot+Vue开发

java智能在线考试系统源码 基于SpringBootVue开发 环境介绍 语言环境&#xff1a;Java: jdk1.8 数据库&#xff1a;Mysql: mysql5.7 应用服务器&#xff1a;Tomcat: tomcat8.5.31 开发工具&#xff1a;IDEA或eclipse 开发技术&#xff1a;SpringbootVue 项目简介&…...

防逆流系统中防逆流电表的正确安装位置-安科瑞黄安南

随着光伏行业的发展&#xff0c;部分地区村级变压器及工业用电变压器容量与光伏项目的装机容量处于饱和。电网公司要求对后建的光伏并网系统为不可逆流发电系统&#xff0c;指光伏并网系统所发生的电由本地负载消耗&#xff0c;多余的电不允许通过低压配电变压器向上级电网逆向…...

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()进行归一化到底在哪里起作用&#xff1f;【CIFAR10源码分析】 torchvision.datasets加载的数据集搭配Dataloader使用model.train()和model.eval() pytorch怎么加载…...

Day1 ARM基础

【ARM课程认知】 1.ARM课程的作用 承上启下 基础授课阶段&#xff1a;c语言、数据结构、linux嵌入式应用层课程&#xff1a;IO、进程线程、网络编程嵌入式底层课程&#xff1a;ARM体系结构、系统移植、linux设备驱动c/QT 2.ARM课程需要掌握的内容 自己能够实现简单的汇编编…...

ns3入门基础教程

ns3入门基础教程 文章目录 ns3入门基础教程ns环境配置测试ns3环境ns3简单案例 ns环境配置 官方网站&#xff1a;https://www.nsnam.org/releases/ 代码仓库&#xff1a;https://gitlab.com/nsnam/ns-3-dev 如果安装遇到问题&#xff0c;可以参考以下博文&#xff1a; https://…...

计算机视觉

目录 一、图像处理 main denoise 二、Harris角点检测 三、Hough变换直线检测 四、直方图显著性检测 五、人脸识别 六、kmeans import 函数 kmeanstext 七、神经网络 常用函数&#xff1a; imread----------读取图像 imshow---------显示图像 rgb2hsv---------RGB转…...

NSSCTF第10页(3)

[LitCTF 2023]彩蛋 第一题&#xff1a; LitCTF{First_t0_The_k3y! (1/?) 第三题&#xff1a; <?php // 第三个彩蛋&#xff01;(看过头号玩家么&#xff1f;) // R3ady_Pl4yer_000ne (3/?) ?> 第六题&#xff1a; wow 你找到了第二个彩蛋哦~ _S0_ne3t? (2/?) 第七题…...

MySQL性能分析工具的使用

1. 统计SQL的查询成本&#xff1a;last_query_cost SHOW STATUS LIKE last_query_cost; 使用场景&#xff1a;它对于比较开销是非常有用的&#xff0c;特别是我们有好几种查询方式可选的时候。 SQL 查询是一个动态的过程&#xff0c;从页加载的角度来看&#xff0c;我们可以得到…...

Uniapp使用AES128加解密16进制

在对接低功耗蓝牙时&#xff0c;我们需要对蓝牙传输数据进行加解密&#xff0c;由于我们对接的命令是16进制&#xff0c;如5500020101aa00&#xff0c;每个16进制表示特定的含义&#xff0c;所以直接对16进制加解密 import CryptoJS from crypto-js// AES128 加密函数 functio…...

C++基础——类与对象

1 概述 C是面向对象的语言&#xff0c;面向对象语言三大特性&#xff1a;封装、继承、多态。 C将万事万物抽象为对象&#xff0c;对象上有其属性和行为。 2 封装 2.1 封装的意义 封装是面向对象的三大特性之一&#xff0c;封装将属性和行为作为一个整体&#xff0c;对属性和…...

人工智能-卷积神经网络

从全连接层到卷积 我们之前讨论的多层感知机十分适合处理表格数据&#xff0c;其中行对应样本&#xff0c;列对应特征。 对于表格数据&#xff0c;我们寻找的模式可能涉及特征之间的交互&#xff0c;但是我们不能预先假设任何与特征交互相关的先验结构。 此时&#xff0c;多层感…...

MySQL的event的使用方法

MySQL的event的使用方法 一、事件定时策略 1、查看event事件开启状态 SHOW VARIABLES LIKE event_scheduler;如图&#xff0c;Value值 ON&#xff1a;打开&#xff0c;OFF&#xff1a;关闭。 2、设置event事件打开 SET GLOBAL event_scheduler ON;如果MySQL重启了&#x…...

Leetcode Daily Challenge 1845. Seat Reservation Manager

1845. Seat Reservation Manager 题目要求&#xff1a;初始化一个SeatManager类包括默认构造函数和类函数&#xff0c;所有的seat初始化为true。reverse函数返回最小的true&#xff0c;然后把这个编号的椅子赋值为false。unreverse(seatNumber)函数把编号为seatNumber的椅子恢…...

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界&#xff0c;看笔记好好学多敲多打&#xff0c;每个人都是大神&#xff01; 题目&#xff1a;KubeSphere 容器平台高可用&#xff1a;环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

后进先出(LIFO)详解

LIFO 是 Last In, First Out 的缩写&#xff0c;中文译为后进先出。这是一种数据结构的工作原则&#xff0c;类似于一摞盘子或一叠书本&#xff1a; 最后放进去的元素最先出来 -想象往筒状容器里放盘子&#xff1a; &#xff08;1&#xff09;你放进的最后一个盘子&#xff08…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…...

FFmpeg 低延迟同屏方案

引言 在实时互动需求激增的当下&#xff0c;无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作&#xff0c;还是游戏直播的画面实时传输&#xff0c;低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架&#xff0c;凭借其灵活的编解码、数据…...

JVM垃圾回收机制全解析

Java虚拟机&#xff08;JVM&#xff09;中的垃圾收集器&#xff08;Garbage Collector&#xff0c;简称GC&#xff09;是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象&#xff0c;从而释放内存空间&#xff0c;避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...

srs linux

下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935&#xff0c;SRS管理页面端口是8080&#xff0c;可…...

高防服务器能够抵御哪些网络攻击呢?

高防服务器作为一种有着高度防御能力的服务器&#xff0c;可以帮助网站应对分布式拒绝服务攻击&#xff0c;有效识别和清理一些恶意的网络流量&#xff0c;为用户提供安全且稳定的网络环境&#xff0c;那么&#xff0c;高防服务器一般都可以抵御哪些网络攻击呢&#xff1f;下面…...

大数据学习(132)-HIve数据分析

​​​​&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4…...

0x-3-Oracle 23 ai-sqlcl 25.1 集成安装-配置和优化

是不是受够了安装了oracle database之后sqlplus的简陋&#xff0c;无法删除无法上下翻页的苦恼。 可以安装readline和rlwrap插件的话&#xff0c;配置.bahs_profile后也能解决上下翻页这些&#xff0c;但是很多生产环境无法安装rpm包。 oracle提供了sqlcl免费许可&#xff0c…...