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

Python | 计算散度

写在前面

简单记录一下计算散度的方法,方便以后查找复制

包括三种计算方式,numpy、metpy、windspharm

其中,numpy和metpy的方法进行了比较,结果比较一致。

windspharm的方法里面包含了两种方法, 一致是直接调用divergence()函数实现,另一个是先计算梯度再相加。

使用windspharm最简单,缺点就是需要使用全球的数据作为输入,而且在Linux上安装,我这里用的是模式数据就没去和metpy和numpy进行验证,只是记录作为一种方法。

  • 比较意外的是,同样的数据,numpy竟然比metpy还快一点。

metpy

def _cal_divergence_metpy(u,v):
    import metpy.calc as mpcalc
    lon = u.lon.data
    lat = u.lat.data
    dx, dy = mpcalc.lat_lon_grid_deltas(lon, lat)
    divergence = np.zeros((u.shape[0],lat.shape[0],lon.shape[0]))
    for i in range(u.shape[0]): 
        print(i)
        divergence[i] = mpcalc.divergence(u = u[i],v = v[i],dx = dx ,dy = dy)
    return xr.DataArray(divergence,dims=u.dims,coords=u.coords)

numpy


def _divergence_with_numpy(u,v):
    import numpy as np
    lon = u.lon.data
    lat = u.lat.data
    xlon,ylat=np.meshgrid(lon,lat)
    dlony,dlonx=np.gradient(xlon)
    dlaty,dlatx=np.gradient(ylat)
    pi=np.pi
    re=6.37e6
    dx=re*np.cos(ylat*pi/180)*dlonx*pi/180
    dy=re*dlaty*pi/180
    u_dx = np.gradient(u,axis=-1)
    v_dy = np.gradient(v,axis=-2)
    div_numpy = np.zeros((u.shape))
    
    div_numpy = u_dx/dx + v_dy[i]/dy
    return   xr.DataArray(div_numpy,dims=u.dims,coords=u.coords) 

windspharm

def _cal_divergence_windspharm(u,v):
    w       = VectorWind(u,v)
    div     = w.divergence()
    dudx, _ = w.gradient(u)
    _, dvdy = w.gradient(v)
    div1 = dudx + dvdy
    return xr.DataArray(div1,dims=u.dims,coords=u.coords),xr.DataArray(div,dims=u.dims,coords=u.coords)

相关文章:

  • TF-IDF算法
  • scss预处理器对比css的优点以及基本的使用
  • 瑞盟MS35774/MS35774A低噪声 256 细分微步进电机驱动
  • 【动态规划】最长公共子序列问题 C++
  • 深入理解与使用 HashedWheelTimer:高效的时间轮定时器
  • python argparse 参数使用详解记录
  • Qt 制作验证码
  • SQL语句---特殊查询
  • 递归,搜索,回溯算法(一)
  • 多版本PHP开发环境配置教程:WAMPServer下MySQL/Apache/MariaDB版本安装与切换
  • ubuntu下docker 安装 graylog 6.1
  • HTML输出流
  • WebMvcConfigurer 的 addResourceLocations
  • Eplan许可管理的自动化工具
  • [Vue2]指令修饰符(一)
  • [问题收集]mysql主从分离过程中,数据不同步可能导致的后果以及应对策略
  • NFC 智能门锁全栈解决方案:移动端、服务器、Web 管理平台
  • src案例分享-逻辑漏洞
  • 软路由用联想j3710主板踩坑
  • 从0到1,解锁Ant Design X的无限可能
  • 古龙逝世四十周年|中国武侠文学学会与多所高校联合发起学术纪念活动
  • 联合国秘书长吁印巴“最大程度克制”,特朗普:遗憾,希望尽快结束冲突
  • 苏丹宣布与阿联酋断交
  • 我给狗狗上课,月赚四五万
  • 上海成五一国内最热门的入境游目的地,国际消费明显提升
  • 一周观展|上海浦东美术馆透纳展还剩最后5天