- 积分
- 39382
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2019-5-13
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 一大碗年糕 于 2025-2-25 11:06 编辑
问题描述:metpy用的不是很多,昨天在计算一些物理量的时候发现在涉及dx,dy时- dx, dy = mpcalc.lat_lon_grid_deltas(ds['longitude'], ds['latitude'])
- div = mpcalc.divergence(u, v, dx=dx, dy=dy)
复制代码 发现报错
- IndexError: too many indices for array: array is 2-dimensional, but 3 were indexed
复制代码
问题原因:涉及偏导的函数如散度mpcalc.divergence和涡度mpcalc.vorticity等时,dx, dy = mpcalc.lat_lon_grid_deltas(ds['longitude'], ds['latitude'])所返回的dx,dy和通常的多维数据3-D(time,lat,lon)或4-D(time,level,lat,lom)维度不匹配,而事实上mpcalc.divergence和mpcalc.vorticity是支持多维UV的,昨天在网上查了下很多教程在此都采用for循环time维和level维解决问题,然而这并不符合简洁计算的逻辑
解决办法一:在dx,dy前补上缺失维
- dx, dy = mpcalc.lat_lon_grid_deltas(ds['longitude'], ds['latitude'])
- dx = dx[None, :]
- dy = dy[None, :]
- div = mpcalc.divergence(u , v, dx=dx,dy=dy)
复制代码 解决办法二:使用grid_deltas_from_dataarray()直接从uv数据中获取dx,dy,避免自己生成
- dx, dy = metpy.xarray.grid_deltas_from_dataarray(u)
- div = mpcalc.divergence(u , v, dx=dx,dy=dy)
复制代码 注意该函数打包在metpy.xarray中而非metpy.calc
参考资料: https://stackoverflow.com/questions/55007717/calculating-vorticity-for-multiple-vertical-levels-in-metpy
|
|