爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 1571|回复: 15

[求助] python 求K指数

[复制链接]

新浪微博达人勋

发表于 2023-12-13 23:36:59 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
请问一下大家为啥会报这个错啊
Cannot convert from 'kelvin ** 2' ([temperature] ** 2) to 'degree_Celsius' ([temperature])
好像是说单位K和℃不匹配,但我没有单位是K的量啊,有人知道为啥吗

t_clim=f_t.air.loc[f_t.time.dt.month.isin([6,7,8])].loc['1981':'2010'].loc[:,1000:300,55:15,70:140]
#print(t_clim) #(90,8,17,29) ℃
rh_clim=f_rh.rhum.loc[f_rh.time.dt.month.isin([6,7,8])].loc['1981':'2010'].loc[:,:,55:15,70:140]
#print(rh_clim) #%
time=rh_clim.time
lat=rh_clim.lat
lon = rh_clim.lon
lev = rh_clim.level #1e+03 925.0 850.0 700.0 600.0 500.0 400.0 300.0
t_clim=np.array(t_clim)*units.degC
rh_clim=np.array(rh_clim)* units.percent
t_clim_mean=np.mean(t_clim,0)*units.degC
# 露点温度
td_clim=np.zeros((90,8,17,29))#*units.degree_Celsius
for i in range(90):
    for j in range(8):
        td_clim[i,j,:,:]= mpcalc.dewpoint_from_relative_humidity(t_clim[i,j,:,:], rh_clim[i,j,:,:])
print(td_clim)
td_clim=np.mean(td_clim,0)*units.degree_Celsius
#print(td_clim) #(8,17,29)
k_clim= np.zeros((17,29))*units.degree_Celsius
k_clim[:,:]=(t_clim_mean[2,:,:]-t_clim_mean[5,:,:])+td_clim[2,:,:]-(t_clim_mean[3,:,:]-td_clim[3,:,:])
print(k_clim)





密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2023-12-15 11:19:10 | 显示全部楼层
SunJiaming 发表于 2023-12-15 09:08
ERA5数据里也有K指数的选项,可以下载下来和你的程序结果做验证,在ERA5 hourly data on single levels fro ...

https://cds.climate.copernicus.e ... gle-levels?tab=form
网址
密码修改失败请联系微信:mofangbao
回复 支持 1 反对 0

使用道具 举报

新浪微博达人勋

发表于 2023-12-14 17:14:04 | 显示全部楼层
td_clim那里你搞错了,你求完平均之后多赋了一个单位,把单位搞成了【℃的平方】。
numpy和metpy是可以混用的,这里你求平均,求完之后得到的结果不是个numpy数组,而是metpy的quantity,是带单位的。
这里并不是K和℃的转换问题,metpy在计算的时候会自动转换温度,K和℃混用是没问题的。
另外td_clim你是可以直接用4维从场来求的,就是直接从t_clim和rh_clim来计算,不需要循环。

密码修改失败请联系微信:mofangbao
回复 支持 1 反对 0

使用道具 举报

新浪微博达人勋

发表于 2023-12-14 09:22:30 | 显示全部楼层
可能是计算过程中有默认K为单位的量?不清楚,猜测哈。这个包对单位的要求挺严格的,或许print检查一下传入 mpcalc.dewpoint_from_relative_humidity 的温度的单位?
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2023-12-14 09:25:35 | 显示全部楼层
楼主这用的哪个包啊?
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2023-12-14 22:36:26 | 显示全部楼层
付亚男 发表于 2023-12-14 17:14
td_clim那里你搞错了,你求完平均之后多赋了一个单位,把单位搞成了【℃的平方】。
numpy和metpy是可以混 ...

成功解决了,太感谢了
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2023-12-14 22:38:40 | 显示全部楼层
莫莫_Orchid 发表于 2023-12-14 09:25
楼主这用的哪个包啊?

想用的是metpy库,因为可以带单位计算
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2023-12-15 09:08:47 | 显示全部楼层
ERA5数据里也有K指数的选项,可以下载下来和你的程序结果做验证,在ERA5 hourly data on single levels from 1940 to present——Others——K index 那里
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2023-12-15 17:09:01 | 显示全部楼层
SunJiaming 发表于 2023-12-15 11:19
https://cds.climate.copernicus.eu/cdsapp#!/dataset/reanalysis-era5-single-levels?tab=form
网址

感谢
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2024-8-2 00:51:10 | 显示全部楼层
SunJiaming 发表于 2023-12-15 09:08
ERA5数据里也有K指数的选项,可以下载下来和你的程序结果做验证,在ERA5 hourly data on single levels fro ...

想问一下 我看到ERA5里面K指数单位是K,但是里面数值大多是正负10的0次到1次的量级,我理解是既然单位是K 不应该量级是两三百吗,这样减去273.15正好是正常温度变化范围的那种量级?
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

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