爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
12
返回列表 发新帖
楼主: 雨落森林

[经验总结] Barnes滤波

[复制链接]

新浪微博达人勋

发表于 2024-5-27 10:52:03 | 显示全部楼层
雨落森林 发表于 2024-5-26 10:22
可能是输入没输入对,你可以详细介绍一下你是怎么做的吗?比如pybarnes是什么版本?以及,你是如何输入的 ...

pybarnes版本是0.2.0;步骤是这样:先读取wrfout文件的位势高度,然后插值到500hPa上(没有缺测,这一步print出来都正常,也能画出来),再用Barnes滤波得到大尺度的位势高度,这步做完之后print出来的数据很多都是nan,也画不出来了

dst = ncdataset('文件路径')

geopt = getvar(dst, "geopt", 60)
p       = getvar(dst, "pressure", 60)
hgt    = interplevel(geopt, p, 500)

f = BarnesFilter(hgt)
hgt_g = f.lowpass(g=0.3, c=30000) #低通滤波,保留大尺度
hgt_g = hgt_g*units.m**2*units.s**-2
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2024-5-28 23:33:10 | 显示全部楼层
镜灵17 发表于 2024-5-27 10:52
pybarnes版本是0.2.0;步骤是这样:先读取wrfout文件的位势高度,然后插值到500hPa上(没有缺测,这一步p ...

理论上这个应该报错的才对,0.2版本我已经不想支持非常规的xr数组了,这个没有报错,应该是把不正常的东西识别成了经纬度,建议手动给它赋予经纬度,像这样:

f = BarnesFilter(hgt.data, lon=hgt.XLONG.data, lat=hgt.XLAT.data)
hgt_g = f.lowpass(g=0.3, c=30000) #低通滤波,保留大尺度
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2024-5-29 14:24:03 | 显示全部楼层
雨落森林 发表于 2024-5-28 23:33
理论上这个应该报错的才对,0.2版本我已经不想支持非常规的xr数组了,这个没有报错,应该是把不正常的东 ...

非常感谢!现在输出的数据看起来正常了!
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2024-7-8 15:02:04 | 显示全部楼层
请问可以直接输入三维数据对每一层进行滤波吗?
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2024-7-13 15:42:06 | 显示全部楼层
hgsndg 发表于 2024-7-8 15:02
请问可以直接输入三维数据对每一层进行滤波吗?

可以的,你可以试试
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2024-8-2 09:33:25 | 显示全部楼层
楼主,请问代码运行时可以关闭
Caculating the first revision...
Caculating the second revision...
的显示么
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2024-8-2 15:00:09 | 显示全部楼层
侯祎林 发表于 2024-8-2 09:33
楼主,请问代码运行时可以关闭
Caculating the first revision...
Caculating the second revision...

可以,lowpass或者bandpass的时候加个print_progress=False就可以取消了,这个输出主要是因为大的数组滤波的时候很慢,输出进度来看的,小数据的话很快就好了,反倒是累赘。
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2024-8-2 15:13:27 | 显示全部楼层
雨落森林 发表于 2024-8-2 15:00
可以,lowpass或者bandpass的时候加个print_progress=False就可以取消了,这个输出主要是因为大的数组滤 ...

我的代码是这样的
f = BarnesFilter(data_, lon=lon_1, lat=lat_1)
g = 0.3
c = 150000
data_b = f.lowpass(g=g, c=c, print_progress=False)
但是程序仍然生成
Caculating the first revision...
Caculating the second revision...
请问怎么解决呢
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2024-8-3 12:20:24 | 显示全部楼层
侯祎林 发表于 2024-8-2 15:13
我的代码是这样的
f = BarnesFilter(data_, lon=lon_1, lat=lat_1)
g = 0.3

已经修复了这个bug并重新发布了,可以重新安装一下试试看,pip uninstall pybarnes卸载,然后pip install pybarnes==0.2.0 -i https://pypi.python.org/simple用pypi源重新安装一下
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2024-8-5 09:02:08 | 显示全部楼层
雨落森林 发表于 2024-8-3 12:20
已经修复了这个bug并重新发布了,可以重新安装一下试试看,pip uninstall pybarnes卸载,然后pip install ...

现在可以了,谢谢大佬
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表