本文用以记录python计算AI天气预报中的ACC代码,其中使用的气候态数据需要用户自己去谷歌云存储中下载

一、ACC介绍与计算公式

原始文章:https://blog.csdn.net/m0_52317152/article/details/135452342

通过计算预报与观测之间的相关性,来衡量预报系统质量。

由于季节变化,直接将预报与观测或分析相关联可能会给出误导性的高值。因此,通常的做法是从预报和验证中减去气候平均值,并根据异常相关系数(ACC)来验证预报和观测的异常。ACC最简单的形式可以写成:
A C C = ( f − c ) ( a − c ) ‾ ( f − c ) ‾ 2 ( a − c ) ‾ 2 ACC=\frac{\overline{(f-c)(a-c)}}{\sqrt{\overline{(f-c)}^2\overline{(a-c)}^2}} ACC=(fc)2(ac)2 (fc)(ac)
其中, f f f代表预测值, a a a为ground truth, c c c为气候态climatology。
理论上ACC越接近1说明预报技巧越高。

二、气候态数据获取

可以直接参考https://blog.csdn.net/weixin_43934886/article/details/139163630?spm=1001.2014.3001.5501

1.环境准备

zarr是一种分布式存储格式,可以直接通过python的xarray包在线读取并调用
首先确保已经安装了numpy,xarray,以及zarr
接着编写python脚本
这里以下载weatherbench2的climatology为例
进入网站 https://console.cloud.google.com/storage/browser/weatherbench2;tab=objects?prefix=&forceOnObjectsSortingFiltering=false

2.编写脚本

import xarray as xr
import numpy as np
climatology = xr.open_zarr('gs://weatherbench2/datasets/era5-hourly-climatology/1990-2019_6h_1440x721.zarr')
#以下载位势高度的气候态为例
geopotential=climatology.geopotential
for idx in range(geopotential.shape[1]):
    temp=geopotential[:,idx]
    file_name = '想放置的文件目录/geopotential'+'_'+str(idx)+'.npy'
    np.save(file_name,temp)

一般来讲该数据的维度为366x[4,721,1440]
每日气候态只有0,6,12,18四个时间点,也就是每六小时预报才能计算一次ACC。
这样可以保存逐日的气候态文件
其他zarr文件下载方式同理

三、定义ACC函数

首先定义分辨率

res=1
lat_len=1+180/res
lon_len=360/res

这里假设res分辨率为1度,若想要计算0.25度,则修改res为0.25即可

我们通过定义纬度权重函数来稀释南北两极的密集网格权重

def gen_weight(lat_len,lon_len):
    lat = np.linspace(-90, 90, lat_len)
    lon = np.linspace(0, 359, lon_len)
    weights = np.cos(lat*np.pi/180)
    W=np.tile(weights,(len(lon),1)).T
    return W
def weighted_average(x):
    W = gen_weight()
    z=np.average(x,weights=W)
    return z

接着根据ACC公式设计计算函数

def acc(pre,true):
    a= weighted_average(true*pre)
    b=np.sqrt(weighted_average(true*true))
    c=np.sqrt(weighted_average(pre*pre))
    return a/b/c

这样就可以得到一个分辨率为1度下的ACC了

四、计算ACC

假设通过模型计算出了结果output,真实值是label,气候态经过下载是climatology
则ACC可由下列代码计算

ACC=acc(output-climatology,label-climatology)

注意这里output和label都是反归一化后的值


Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐