爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 165|回复: 0

[求助] python怎么计算PDSI和SCPDSI?

[复制链接]

新浪微博达人勋

发表于 2025-2-12 16:34:43 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 lumux 于 2025-2-13 09:34 编辑

求助各位大神,怎么在python中计算PDSI和SCPDSI?之前在climat indices 中计算,一直出错,请问有没有更好的办法?
import numpy as np
import xarray as xr
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import cartopy.feature as cfeature
from climate_indices import palmer
from cartopy.mpl.ticker import LongitudeFormatter, LatitudeFormatter
# 数据路径
#data_path0 = r"d:\data\nclimgrid_lowres_tavg.nc"
data_path1 = r"d:\data\nclimgrid_lowres_prcp.nc"
data_path2 = r"d:\data\nclimgrid_lowres_pet.nc"
data_path3 = r"d:\data\nclimgrid_lowres_soil.nc"
#ds = xr.open_dataset(data_path2)
#print(ds.pet)
# 打开数据
prcpd = xr.open_dataset(data_path1).prcp
petd = xr.open_dataset(data_path2).pet
awcd = xr.open_dataset(data_path3).awc
# 转换为NumPy数组
prcpdd = prcpd.to_numpy()
petdd = petd.to_numpy()
awcdd = awcd.to_numpy()
# 计算pdsi
pdsid = palmer.pdsi(prcpdd/25.4,petdd/25.4,awcdd,1895,2000,2010)
print(pdsid)

显示如下错误:
Traceback (most recent call last):
  File "C:\Users\sdswh\AppData\Roaming\Python\Python312\site-packages\climate_indices\palmer.py", line 2358, in pdsi
    ET, PR, R, RO, PRO, L, PL = _water_balance(awc,
                                ^^^^^^^^^^^^^^^^^^^
  File "C:\ProgramData\anaconda3\Lib\site-packages\numba\core\dispatcher.py", line 423, in _compile_for_args
    error_rewrite(e, 'typing')
  File "C:\ProgramData\anaconda3\Lib\site-packages\numba\core\dispatcher.py", line 364, in error_rewrite
    raise e.with_traceback(None)
numba.core.errors.TypingError: Failed in nopython mode pipeline (step: nopython frontend)
Untyped global name '_water_balance_potential_loss': Cannot determine Numba type of <class 'function'>

File "C:\Users\sdswh\AppData\Roaming\Python\Python312\site-packages\climate_indices\palmer.py", line 216:
def _water_balance(awc, pet, precip):
    <source elided>
        # calculate potential loss values
        PL[k], PLs[k], PLu[k] = _water_balance_potential_loss(
        ^

Traceback (most recent call last):

  File C:\ProgramData\anaconda3\Lib\site-packages\spyder_kernels\py3compat.py:356 in compat_exec
    exec(code, globals, locals)

  File d:\pp\test2-pdsi.py:37
    pdsid = palmer.pdsi(prcpdd/25.4,petdd/25.4,awcdd,1895,2000,2010)

  File ~\AppData\Roaming\Python\Python312\site-packages\climate_indices\palmer.py:2358 in pdsi
    ET, PR, R, RO, PRO, L, PL = _water_balance(awc,

  File C:\ProgramData\anaconda3\Lib\site-packages\numba\core\dispatcher.py:423 in _compile_for_args
    error_rewrite(e, 'typing')

  File C:\ProgramData\anaconda3\Lib\site-packages\numba\core\dispatcher.py:364 in error_rewrite
    raise e.with_traceback(None)

TypingError: Cannot determine Numba type of <class 'function'>

密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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