研究台风的同学们应该都接触过需要计算以台风为中心的方位角平均物理量,这就需要将笛卡尔坐标系中的数据插值到极坐标系,再对各个方位角的数据进行平均。最近在学习Python,相比NCL和FORTRAN,Python程序更为简洁,可以调用很多现成的库,最后插值效果也还不错。

以ERA5数据为例,给定一个台风中心,选取层次为500 hPa,进行插值计算:

#用到的库
from scipy import interpolate #用来插值
import metpy.calc as mpcalc   #常用气象物理量计算的库
from metpy.units import units
import xarray as xr
import numpy as np def main():   #nc数据读取ds = xr.open_dataset('data.nc')lat = ds.latitudelon = ds.longitudetime = ds.time#这边以一个时次、单层为例,lon_t,lat_t是台风中心位置uwnd = ds['u'].sel(time = time[0],level= 500)lon_t=128.9lat_t=20.0#azimuths是极坐标系中的角度,ranges是半径,可以根据自己需要设置azimuths = np.linspace(0,360,73)*units.degreeranges = np.linspace(0,1000,101)*1000*units.meter#利用metpy库可以十分便捷的得到插值后的经纬度坐标lon_a,lat_a = mpcalc.azimuth_range_to_lat_lon(azimuths,ranges,lon_t,lat_t)#因为ERA5的数据分辨率是0.25°,为了保证插值后不产生NAN,边界上各扩大一个格点lons = lon[(lon>=lon_a.min()-0.25) & (lon<=lon_a.max()+0.25)] lats = lat[(lat>=lat_a.min()-0.25) & (lat<=lat_a.max()+0.25)]#构造插值前的格点矩阵lon_s,lat_s = np.meshgrid(lons,lats)grid_in = np.concatenate([lon_s.reshape(-1,1), lat_s.reshape(-1,1)], axis=1)grid_out = np.concatenate([lon_a.reshape(-1,1), lat_a.reshape(-1,1)], axis=1)#这边以变量u为例,进行插值u_in = uwnd.sel(longitude=lons,latitude=lats)u_out = interpolate.griddata(grid_in, np.array(u_in).flatten(), grid_out, method='cubic')u_out = u_out.reshape((len(azimuths),len(ranges)))#画填色图检验插值数据fig = plt.figure(figsize=(11,4))fig1 = plt.subplot(1, 2, 1) #插值前的uc_f1 = plt.contourf(lons, lats, u_in, np.arange(-12,6,2), cmap='bwr', extend='both')plt.title('u_wind in original data')plt.scatter(lon_t,lat_t, s=150, marker=get_hurricane(),edgecolors="black", linewidth=2.3,zorder=3)fig2 = plt.subplot(1, 2, 2) #插值后的uc_f2 = plt.contourf(lons, lats, u_out, np.arange(-12,6,2), cmap='bwr', extend='both')plt.title('u_wind after interpolation')plt.scatter(lon_t,lat_t, s=150, marker=get_hurricane(),edgecolors="black", linewidth=2.3,zorder=3)#色标的设置cbar = plt.colorbar(c_f1,orientation='vertical',shrink=0.75)    cbar.ax.tick_params(labelsize='12')plt.show()if __name__ == "__main__":main()

得到插值前后变量u的对比图:

可以看到插值效果还是十分不错的。

插值后的数据是方位角和半径的函数,接下来就可以利用插值后的数据进行方位角平均,这里介绍最常用的切向风与径向风的计算:

#分别对变量u和v进行插值
u_in = ds['u'].sel(longitude=lons, latitude=lats)
v_in = ds['v'].sel(longitude=lons, latitude=lats)
u_out = interpolate.griddata(grid_in, np.array(u_in).flatten(), grid_out, method='cubic')
v_out = interpolate.griddata(grid_in, np.array(v_in).flatten(), grid_out, method='cubic')
u_out = u_out.reshape((len(azimuths),len(ranges)))
v_out = v_out.reshape((len(azimuths),len(ranges)))#计算切向风、径向风
vt = np.zeros((len(azimuths),len(ranges)))
vr = np.zeros((len(azimuths),len(ranges)))
for k in range(0,len(azimuths)):for l in range(0,len(ranges)):vt[k,l]=v_out[k,l]*np.cos(azimuths[k]*np.pi/180)-u_out[k,l]*np.sin(azimuths[k]*np.pi/180)vr[k,l]=u_out[k,l]*np.cos(azimuths[k]*np.pi/180)+v_out[k,l]*np.sin(azimuths[k]*np.pi/180)  #计算方位角平均
vt_am = np.mean(vt,axis=0)
vr_am = np.mean(vr,axis=0)

对多层数据进行计算后,可以得到方位角平均的半径-气压剖面图:

这两张图可以清楚的给出台风切向风与径向风的垂直分布特征。

python气象数据处理——计算台风方位角平均物理量相关推荐

  1. python气象绘图速成_基于Python气象数据处理与可视化分析

    基于 Python 气象数据处理与可视化分析 张鑫 ; 曹蕾 ; 韩基良 [期刊名称] <气象灾害防御> [年 ( 卷 ), 期] 2020(027)001 [摘要] 全国综合气象信息共享 ...

  2. python 气象绘图 计算多年一月的nino指数和站点降水相关图

    python 气象绘图 计算多年一月的nino指数和站点降水相关图 效果图 代码实现 导入包 import cartopy.crs as ccrs import cartopy.io.shaperea ...

  3. 锂离子电池健康状态估计简介(一):基于Python的数据处理计算SOH,RUL,CCCT,CVCT

    锂离子电池无论是在军用还是民用领域都得到了广泛的应用,在锂离子电池健康评估中主要关注的参数有SOH和RUL.准确对其进行健康状态(Stateof Health, SOH)评估及剩余使用寿命(Reman ...

  4. python气象数据处理与绘图_Python气象数据处理与绘图(15):两种波作用通量计算的python实现及对比(Plumb T-N) (已更正)...

    大气动力学中通常用波作用通量来诊断 Rossby波的传播.常用的三种波作用通量分别为局地E-P 通量,Plumb 波作用通量和T-N 波作用通量.局地E-P 通量可以诊断一段时间内天气尺度瞬变波对定长 ...

  5. python气象数据处理与绘图_Python气象数据处理与绘图:纬高图的另一种思路

    前言 有些时候为了研究不同高度上气象要素之间的联系,纬度-高度作为xy轴的图在一些SCI论文中比较常见. 这是我研究的CMIP6数据中ua,va,wap,ta这几个气象要素在纬度-高度图上的不同. 读 ...

  6. python使用numpy包编写自定义函数计算SMAPE(对称平均绝对百分比误差)指标Symmetric mean absolute percentage error、SMAPE指标解读、指标使用的注

    python使用numpy包编写自定义函数计算SMAPE(对称平均绝对百分比误差)指标Symmetric mean absolute percentage error (SMAPE).SMAPE指标解 ...

  7. 【案例教程】Python气象海洋数据可视化到常见数据分析方法(折线图、柱状图、errorbar图、流场矢量、散点图、风玫瑰图、流场矢量、填色及等值线+地图)

    [查看原文]Python在气象与海洋中的实践技术应用 Python是功能强大.免费.开源,实现面向对象的编程语言,能够在不同操作系统和平台使用,简洁的语法和解释性语言使其成为理想的脚本语言.除了标准库 ...

  8. python基础代码库-Python基础数据处理库-NumPy

    最近更新:2017-07-19 NumPy是Python做数据处理的底层库,是高性能科学计算和数据分析的基础,比如著名的Python机器学习库SKlearn就需要NumPy的支持.掌握NumPy的基础 ...

  9. 【数据可视化应用】xarray 绘图可视化(五)-二进制GrADS气象数据处理(附代码)

    二进制GrADS气象数据处理(Ⅰ) 在GrADS中,数据的读取的逻辑是采用数据文件和数据信息(元信息)分离的方法,因而对于GrADS类数据是由两个独立的文件存储的. 第一个文件--数据文件:这个数据文 ...

最新文章

  1. 程序在内存中运行的奥秘
  2. 【PAT乙级】1058 选择题 (20 分)
  3. OPPO尝鲜android版本更新,安卓11迎来四大贴心升级,OPPO小米率先尝鲜
  4. web百度地图 地址解析获取百度地理坐标
  5. c1200 写频软件_摩托罗拉XIR C1200数字对讲机试用——来自HAM族的呼叫
  6. maven 文件上传下载_使用Maven将文件上传和下载到S3
  7. html特殊符号拉丁文,拉丁文字符号大全,罗马字母
  8. 产品做出来了,我们该怎么办?
  9. 『搬运』分享一些国内外的专利搜索网站
  10. dfuse 为你提供定制网络服务
  11. 大流量下订单号生成方法
  12. 我的职业是计算机英语,职业英语系列:计算机英语
  13. Uav开发杂记-4-无人机开发的C-C++
  14. Leetcode 838. 推多米诺 C++
  15. css3探测光圈_CSS3光圈散开提示效果
  16. vuex的state数据丢失
  17. 【AI】封杀这个公式,AI智商将为零【转】
  18. scandir 参数
  19. 在Windows中安装Anaconda、NumPy和Matplotlib软件包
  20. 2018.8.22日阿里巴巴java实习生面试答案整理

热门文章

  1. 基于主要成分分析的人脸二维码识别系统-含Matlab代码
  2. vue获取tr内td里面所有内容_vue的v-for循环添加tr,取tr中的某两个td进行运算
  3. 判定两棵树是否是同构树(C语言)
  4. java jms框架_JMS (Java Message Service)
  5. 2020熔化焊接与热切割作业考试题库及熔化焊接与热切割考试试题
  6. 【论文精读】ISBI 2022 - Retinal Vessel Segmentation with Pixel-wise Adaptive Filters
  7. 电梯ic卡信息服务器的线怎么接,电梯IC卡分层制器安装接线图.doc
  8. 网络局域网组建及测试实验报告
  9. .net 里可以轻松对图片文件进行质量压缩
  10. Kubernetes-Kuboard