gma 气象气候函数包的简要介绍及运算过程主要问题说明(内存不足、出现 nan 等)及解决方法

news2024/9/27 21:31:21

0 概述

0.1 明确气候与气象的概念

   气候(Climate):是指一个地区大气物理特征的长期平均状态,具有一定的稳定性,且周期长。根据世界气象组织(WMO)的规定,一个标准气候计算时间为 30 年。

   气象(Meteorology):指发生在天空中的风、云、雨、雪、霜、露、闪电、打雷等一切大气的物理现象,具有一定的波动性,且周期短。气象条件的变化往往引发天气状况的改变。

0.2 gma 气候气象函数包 (climet) 基本情况

   gma 气候气象函数包 climet(climate 和 meteorology)是针对于气候气象相关计算的工具集合。目前主要包括 4 大部分共计15个函数,每个函数都提供详细的内置帮助(可使用help(gma.climet.~)查看,也可到 gma 官方网站 查看) ,主要分类为:

函数组子类子函数
气候气象指数-SPI、SPEI、PAP
气候诊断DiagnosisMKMutationTest、Buishand、Pettitt、SNHT
参考蒸散量ET0Hargreaves、PenmanMonteith、Thornthwaite
其他函数OtherDaylightHours、Declination、HourAngle、RDBSunAndEarth、SolarRadiationFluxOA

1 气象气候函数的主要计算过程

1.1 运行环境

系统: Window 10+ (X64),自 1.1.0 开始支持 Linux(X64)。
Python 版本:3.8 ~ 3.10
gma 版本: 1.1.2 +

安装:pip install gma

1.2 以SPI为例的计算过程

   详见:图解 gma 气候标准化指数运算过程的数组变化流程:以 SPI 为例。

在这里插入图片描述

   由图可知,gma 在运算过程中,仅对数组形状进行变换,未使用循环迭代

2 主要问题及解决方案

   从目前收到的反馈可知,主要问题有两点。一个是运算出现 nan ,另一个是栅格运算过程中出现的 内存不足 (MemoryError)

2.1 出现 nan 的原因和解决方案

序号可能的原因解决方案
1数据太少参考 0.1 中描述,气候数据请保证足够的数据量。气候指标请保证数据至少有3个周期;月尺度ET0计算保证至少有1年有效数据。当有效数据不足时,gma会直接返回全 nan 数组!
2周期设置太长参考 1.2 中图解,周期的长短决定了周期中每个时段参与拟合计算的数据数量,周期越长,其数量越少,越容易出现 nan!长周期情况下,请增加数据数量!
3数据本身不满足分布此种情况可:1、检查并优化数据。2、选择合适的分布函数 Distribution,可选的分布包括:‘Gamma’ (Maximum Likelihood Estimation):伽马分布(参数估计:最大似然估计);‘LogLogistic’ (L-Moment Estimation(PWD)):对数逻辑斯蒂分布(参数估计:L-矩估计(概率加权矩));‘Pearson3’ (L-Moment Estimation):泊松 III 分布(参数估计:L-矩估计)。
4其他异常数据例如 gamma 分布要求数据必须为正数,如果原始值有负数(或0),可能造成结果 nan。gma 内部并未进行此类处理,因此,在计算之前,可将数据整体平移,保证所有有效值均大于 0。

2.2 内存不足解决方案

   内存不足主要出现在栅格数据计算上。请大家注意,gma 为了提高运算效率,其中未使用任何循环迭代(参考 1.2)!这样做极大减少了运算时间,但同时带来了更多的内存占用,当电脑内存太小时(相对于计算数据),大概率发生引发 MemoryError 内存错误!
   因此,如果不想拆分文件,那么主要的解决方法就是循环(计算过程需要更长的时间)! 以 gma 教程 | 气候气象 | 计算标准化降水指数(SPI) 为例,若栅格运算出现 MemoryError ,则可参考尝试采用如下方法循环计算:

import gma
import numpy as np
# 读取数据集
PRESet = gma.Open('PRE_Luoyang_1981-2020.tif')

## 建立一个 半精度浮点数 数组存储结果
Rows = PRESet.Rows
Columns = PRESet.Columns
Bands = PRESet.Bands

### 由于 数据的 NoData 可能超过 float16 的数据范围,因此这里定义一个不可能出现在计算结果中的值作为 NoData 标记。
SPI = np.full((Bands, Rows, Columns), -99, dtype = np.float16)

# 确定需要计算的尺度
Scales = [1,3,6,12,24,60]

# 循环 6 个尺度
for i in Scales:
	## 循环计算结果
	for r in range(Rows):
		for c in range(Columns):
			## 每次读取 1 个位置
			TempData = PRESet.ToArray(r, c, 1, 1)
			## 跳过 NoData 区域(不适合 NoData 为 np.nan 或 np.inf 的数据)
			if TempData[0, 0, 0] == PRESet.NoData:
				continue
			SPI[:, r, c] = gma.climet.SPI(TempData, Scale = i)	
			
	# 保存所有结果中的非全 nan 波段。即:去除时间尺度累积时序列前无效的波段。
    gma.rasp.WriteRaster(fr'.\1981-2020_SPI{i}.tif', 
                         SPI[i-1:], 
                         Projection = PRESet.Projection,
                         Transform = PRESet.GeoTransform, 
                         DataType = 'Float32', 
                         NoData = -99)  

   其他迭代方法这里不做列举,可自行探索,按需修改。

   ToArray 的参数解释请使用 help 获取或参考网址: ToArray 。

为何使用半精度浮点数(float16)?

  1. 如果对结果没有过高的精度需求,可使用半精度浮点数(float16)。如果对精度有要求,可自行定义其他数据类型,例如单精度浮点数(float32)或双精度浮点数(float64) 。
  2. 占用空间小。不同数据类型占用空间的大小请参考:NumPy 数组应用初探。
  3. 建议:使用单精度浮点数(float16)会极大的降低数据精度,因此大多数情况下不推荐使用(上述仅作示例,因为其在 numpy 支持的浮点数中内存占用最少)!

   注意:gma 不支持保存半精度浮点数(float16)栅格。在写出栅格时,统一转为单精度浮点数(float32)(gma 标记:‘Float32’)保存。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/170197.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【论文笔记】一文读懂残差网络ResNet(附代码)

Residual Net论文笔记1. 传统深度网络的问题2. 残差结构和残差网络2.1 残差是什么2.2 残差模块 Residual Block2.3 基本模块BasicBlock和BottleNeck2.4 残差网络ResNet设计2.4.1 恒等映射与残差的连接3. Forward/Backward Propagation3.1 Forward propogation3.2 Back Propogat…

深信服行为感知命令执行漏洞

深信服行为感知命令执行漏洞1.深信服行为感知漏洞1.1.漏洞描述1.2.漏洞影响1.3.漏洞复现1.3.1.登录页面1.3.2.构建漏洞URL1.3.2.1.查询IP地址1.3.2.2.查询当前目录下文件1.深信服行为感知漏洞 1.1.漏洞描述 深信服 行为感知系统c.php远程命令执行漏洞,使用与EDR相同…

Docker搭建kafka集群

Docker搭建kafka集群集群规划镜像版本kafka为什么需要依赖zookeeper创建docker网络搭建zk集群新建文件docker-compose-zk.yml启动搭建kafka集群新建docker-compose-kafka.yml启动集群安装kafka-manager新建 docker-compose-kafka-manager.yml启动kafka-manager配置cluster修改k…

Pandas 数据结构 - DataFrame

Pandas 数据结构 - DataFrameDataFrame 是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型值)。DataFrame 既有行索引也有列索引,它可以被看做由 Series 组成的字典&#xff08…

nexus3 搭建maven私服

首先下载nexus3安装包 这里使用linux版, 需要win或mac版请自行百度 链接:https://pan.baidu.com/s/11Z_884pt11l04460ldUyVA?pwdycuo 提取码:ycuo 上传linux服务器进行解压缩 解压缩后的文件目录 进入到 nexus的执行目录 /nexus-3.31.1-01/bin 运行…

Qt 6.x中的信号和槽介绍及示例

信号(signals)和槽(slots)用于对象之间的通信,Qt使用信号和槽完成了事件监听操作。信号和槽机制是Qt的核心特性,可能也是与其它框架提供的特性最大的不同之处。信号和槽是通过Qt的元对象系统(Meta-Object system)实现的,Qt的元对象系统使信号…

【寒假每日一题】DAY.10 杨辉直角(等腰)三角

目录 一、杨辉直角三角 思路 按部就班 代码实现 二、杨辉等腰三角 注:由于VS不支持变长数组,这里我就用n4来写 一、题目名称 题目内容: 输入一个数n,在屏幕上打印n行n列的杨辉三角。例如:输入:4输出&am…

CSRF与XSS组合拳

目录 先介绍下这两个漏洞: CSRF XSS 实验: 环境: CSRF与反射型xss的第一拳 CSRF与存储型XSS的第二拳: 先介绍下这两个漏洞: CSRF CSRF是跨站请求伪造攻击,由客户端发起,是由于没有在关键操作执行时进…

美团滑块(1-18,js逆向)

网址:aHR0cHM6Ly9wYXNzcG9ydC5tZWl0dWFuLmNvbS9hY2NvdW50L3VuaXRpdmVsb2dpbg整体流程: 1、获取主页参数 2、逆向pwd、h5Fingerprint 3、请求page_data链接 4、逆向Authencation、behavior、token_ 5、最终请求验证一、获取主页参数 url_ "https:/…

信息论复习—信息论的基本概念

信息的概念:古代的信息技术:现代的信息技术信息与消息的关系:消息:用文字、符号、数据、语言、音符、图片、图像等能够被人们感觉器官所感知的形式,把客观物质运动和主观思维活动的状态表达出来就称为消息。信息&#…

Flink 实时计算DIM层实现方案

1 概述 DIM层设计要点: (1)DIM层的设计依据是维度建模理论,该层存储维度模型的维度表。 (2)DIM层的数据存储在 HBase 表中DIM 层表是用于维度关联的,要通过主键去获取相关维度信息,…

html2canvas移动端使用问题及解决

1、jsbridge重复调用问题现象&#xff1a;与移动端进行通信&#xff0c;通过<script>标签里的jsbridge.js来调用端上的接口&#xff0c;在调用接口之后&#xff0c;调用html2canvas来生成图片&#xff0c;发现刚才调用的接口又被调用了一次解决方案&#xff1a;在html2ca…

比YOLOv8还要强的YOLOv6 v3.0

论文地址&#xff1a;https://arxiv.org/pdf/2301.05586.pdf 开源地址&#xff1a;https://github.com/meituan/YOLOv6 YOLOv6 v3.0的主要贡献简述如下&#xff1a; 对检测器的Neck部件进行了翻新&#xff0c;引入BiC(Bi-directional Concatenation)提供更精确的定位信息&…

好看的vscode深色主题,搜索主题名称即可设置

1.watermelon-theme 西瓜颜色的主题&#xff0c;满满的夏天感&#xff0c;红色交替的温柔。 2.Kawaine Theme 好看的粉色系主题&#xff0c; 3. Feminine Color Theme 很适合女孩子的一个主题&#xff0c;好看如其名。 4.pinkFlower-theme 这个真的超粉&#xff0c;很好看的…

Python采集常用:谷歌浏览器驱动——Chromedriver 插件安装教程

人生苦短 &#xff0c;我用Python 趁放假&#xff0c;偷偷卷起来&#xff01;&#xff01;&#xff01; 我们经常要使用谷歌浏览器驱动&#xff0c; 今天分享下这个Chromedriver 插件的安装方法。 一、打开谷歌浏览器打开设置面板 二、查看当前谷歌浏览器版本号 三、点击插件…

计算机取证科普性基础

内容为美亚柏科公开课笔记。 1 Windows系统与取证 1.1 存储介质取证概述 专业名词 未分配空间文件残留区 物理大小逻辑大小文件大小物理大小-逻辑大小 临时文件 C:\Windows\Temp*.tmpC:\Documents and Settings\Username\Local Setting\Temporary Internet FilesC:\Documen…

接口超时分析

原文&#xff1a;接口突然超时&#xff01;&#xff01;&#xff01; 1、网络异常 1.1、网络抖动 经常上网的我们&#xff0c;肯定遇到过这样的场景&#xff1a;大多数情况下我们访问某个网站很快&#xff0c;但偶尔会出现网页一直转圈&#xff0c;加载不出来的情况。 有可…

centos7 升级 gcc 版本

查看动态库版本 strings /usr/lib64/libstdc.so.6 | grep CXXABI查找gcc生成的最新动态库 find / -name "libstdc.so*"方法一&#xff1a; 1、查看当前gcc版本 #默认4.8.5 g -v 或者 gcc --version2、下载gcc源码&#xff08;10.2.0&#xff09; wget https://f…

2022.12青少年软件编程(Python)等级考试试卷(六级)

2022.12.10青少年软件编程(Python)等级考试试卷(六级) 一、单选题(共25题,共50分) 1.数据文件“abc.txt”中包含若干个英文单词,如图所示: 读取文件“abc.txt”中数据的Python程序段如下: file = abc.txt word_b = [] for word in open(file): if w…

spring boot支持https请求(建议收藏)

文章目录前言一、借助keytools二、详细步骤三、配置spring项目支持https总结前言 博主个人社区&#xff1a;开发与算法学习社区 博主个人主页&#xff1a;Killing Vibe的博客 欢迎大家加入&#xff0c;一起交流学习~~ 众所周知&#xff0c;http是不安全的协议&#xff0c;那么要…