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

gma中计算CWDI(作物水分亏缺指数)的源代码

这次是干货

作物水分亏缺指数

作物水分亏缺指数(Crop Water Deficit Index,CWDI,%)从农田水分平衡出发,引入了作物系数,考虑了作物需水特性,能很好好的反应作物缺水状况。计算公式如下:

源代码(可以自由的适配和改造)

代码构建过程采用了向量化的思路,进而提高计算效率并减少内存消耗(对于巨量数据有效)

fromgma._algos.arrmtimportto_num_arrays_with_same_shapeimportnumpyasnp### to_num_arrays_with_same_shape 用于将数据数据格式化为统一的形状,且保证为数字型(整数、浮点数等)数组。### 可选择性移除这个过程,因为不是必须的。### 复杂度高是应为适应了n维数据按照不同轴(axis)计算classMoistureIndex:''' 降水-蒸散 构建的相关指数 '''def__init__(self,pre,et0,axis=None):## 初始化计算数据self._pre,self._et0=to_num_arrays_with_same_shape(pre,et0)## 脱离 gma (不验证和处理原始数据)直接使用下行代码#### self._pre, self._et0 = pre, et0ifaxisisNone:self._pre=self._pre.flatten()self._et0=self._et0.flatten()self._base_axis=0else:self._base_axis=axis self._pre=self._pre.swapaxes(0,self._base_axis)self._et0=self._et0.swapaxes(0,self._base_axis)self._shape=self._pre.shapedefCWDI(self,weights=[0.3,0.25,0.2,0.15,0.1],duration_per_weight=10):# etc 在这里是 self._et0## 确定每个计算单元所需的数据长度(0轴上)x_len=len(weights)*duration_per_weight# 注意:axis上前x_len-1是无数据的(为np.nan),因为不满足累积量weights=np.array(weights)## 输出数组res=np.full(self._shape,np.nan)## 循环 x_len 次,计算每个位置的结果foriinrange(x_len):## 每 x_len 个数据为一组,末尾不足 x_len 的数据本轮计算时被丢弃d_num=(self._shape[0]-i)%x_len d_end=self._shape[0]-d_num c_pre,c_et0=self._pre[i:d_end],self._et0[i:d_end]## 每 duration_per_weight 个数据为一组,计算累加值,以及i_cwdinew_shape=(c_pre.shape[0]//duration_per_weight,duration_per_weight,*c_pre.shape[1:])c_pre=c_pre.reshape(new_shape).sum(axis=1)c_et0=c_et0.reshape(new_shape).sum(axis=1)i_cwdi=(1-c_pre/c_et0)*100i_cwdi[i_cwdi<0]=0## 每 len(weights) 个数据为一组,计算 cwdii_cwdi=i_cwdi.reshape(i_cwdi.shape[0]//len(weights),len(weights),*i_cwdi.shape[1:])d_weights=weights[None,:,*([None]*(i_cwdi.ndim-2))]cwdi=(i_cwdi*d_weights).sum(axis=1)res[(i+x_len-1)::x_len]=cwdireturnres.swapaxes(0,self._base_axis)

示例

从 excel 开始计算

in_file="PRE_ET0.xlsx"# 使用pandasimportpandasaspd df=pd.read_excel(in_file)pre,etc=df['PRE'],df['ET0']##这里仅做演示,实际使用时请使用真实的ETcmi=MoistureIndex(pre,etc)cwdi=mi.CWDI()## 使用 gma==3.0.0a12# from gma import gio, climet# xlsx_ly = gio.open_vector(in_file)# df = xlsx_ly.to_pandas()# pre, etc = df['PRE'], df['ET0'] ##这里仅做演示,实际使用时请使用真实的ETc# cwdi = climet.index.CWDI(pre, etc)

从 tif 开始计算

## 使用 gma==3.0.0a12fromgmaimportgio,climet ds_pre=gio.open_raster(r"D:\BaiduNetdiskDownload\ne\第5章\PRE_Luoyang_1981-2020.tif")ds_etc=gio.open_raster(r"D:\BaiduNetdiskDownload\ne\第5章\ET0_Luoyang_1981-2020.tif")##这里仅做演示,实际使用时请使用真实的ETc## 将两个 tif 组合为虚拟文件,方便整体计算ds=gio.VirtualRasterDataset([ds_pre,ds_etc])defcal(in_ar):# 一共 960 个波段,其中前480个是 pre,后480个是 etcpre=in_ar[:480]etc=in_ar[480:]mi=MoistureIndex(pre,etc,axis=0)cwdi=mi.CWDI()## 或者直接使用 gma 函数# cwdi = climet.index.CWDI(pre, etc)cwdi[pre.mask]=ds.nodata# 掩膜掉 nodatreturncwdi# algebraic 方法直接返回一个栅格数据集,默认存储在内存中nds=ds.algebraic(cal)### 或者直接保存到文件# out_file = 'cwdi.tif'# nds = ds.algebraic(cal, out_dst = out_file)

获取本文用到的数据(私信作者)

http://www.cnnetsun.cn/news/1878570.html

相关文章:

  • 知网AI率高想降下来,嘎嘎降AI、比话降AI、率零横评
  • 零基础玩转Sambert语音合成:开箱即用镜像,小白也能做专业配音
  • GLDAS数据变量单位速查与避坑指南:别再搞混土壤湿度和蒸散发单位了!
  • 简单理解:Qi 无线充电
  • 2026年抖音买单真相:3公里内精准引流背后的4大红利
  • 每天睡前问三个问题,比检查作业更有效
  • 安科瑞AIM-T系列工业IT绝缘监测及故障定位解决方案为关键供电场所筑牢安全防线
  • 1 【3D Gaussian Splatting: From Theory to Real-Time Implementation】第一级:基础理论与数学建模
  • 2026届最火的降重复率方案推荐榜单
  • 【2026年最新600套毕设项目分享】微信小程序电影订票系统(30048)
  • 大模型学习指南:收藏这份资料,小白程序员轻松掌握RAG,开启AI新技能!
  • 后端转AI大模型应用开发:小白必看收藏!2026年真实路径与避坑指南
  • OneAPI部署实操手册:从零配置到多渠道管理,支持腾讯混元、通义千问、文心一言等全生态
  • Sub-VLAN 跨三层通信核心知识点(精简版)
  • 32TOPS算力+工业级宽温适配!SE110S-WA32边缘计算微服务器全解析
  • 32 openclaw容器化部署:Docker与Kubernetes集成指南
  • 基于模型剪枝与量化的YOLOv5边缘计算加速:从训练到部署完整实战
  • Jupyter Notebook白屏问题排查与解决全记录
  • arm64麒麟服务器内网离线安装minio
  • 从链表到二叉树:树形结构的入门与核心性质解析
  • 麒麟V10生产环境Nginx 1.28.0部署全攻略:从源码编译到极致优化
  • ConvNeXt 系列改进:ConvNeXt 添加 MetaFormer 风格池化层,简化 Block 并保持性能
  • 该技术通过智能算法识别论文重复内容,并借助语义改写与篇章重构提升文本独特性
  • 【我的Android进阶之旅】解决Android Studio 运行gradle命令时报错: 错误: 编码GBK的不可映射字符
  • Hi3519DV500_Uboot环境变量的定制化配置与实战烧录指南
  • ESP32/ESP8622 -- 使用MQTT协议连接云平台(带图文说明)
  • 【RKNN C++实战】从PyTorch模型到边缘设备:一站式部署流程与性能调优指南
  • 【C++类和对象(中)】—— 我与C++的不解之缘(四)
  • WinDiskWriter:在Mac上制作Windows启动盘的终极解决方案
  • 终极Monitoror路线图:2024年新功能和改进计划全面展望