File size: 1,444 Bytes
ffdf763
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from pathlib import Path
import sys,numpy as np
import matplotlib;matplotlib.use("Agg");import matplotlib.pyplot as plt
ROOT=Path(__file__).resolve().parents[1];sys.path.insert(0,str(ROOT))
from model.precip_extremes_gan import load_config,write_json
c=load_config(ROOT);d=np.load(ROOT/c["paths"]["predictions"]);q=c["evaluation"]["extreme_percentile"];metrics={}
for name,p in (("deterministic",d["baseline"]),("gan",d["mean"])):
 metrics[name]={"mae":float(np.mean(abs(p-d["target"]))),"extreme_percentile_mae":float(np.mean(abs(np.percentile(p,q,axis=0)-np.percentile(d["target"],q,axis=0))))}
def signal(a):
 h=a[d["period"]==0].mean(0);f=a[d["period"]==1].mean(0);return 100*(f-h)/np.maximum(h,.1)
truth=signal(d["target"]);metrics["climate_signal_mae_percent"]={"deterministic":float(np.mean(abs(signal(d["baseline"])-truth))),"gan":float(np.mean(abs(signal(d["mean"])-truth)))};metrics["synthetic"]=True;write_json(ROOT/c["paths"]["evaluation"],metrics)
fig,ax=plt.subplots(1,4,figsize=(14,3.5));fields=(d["target"][0,0],d["baseline"][0,0],d["mean"][0,0],abs(d["mean"][0,0]-d["target"][0,0]));titles=("CCAM target","Deterministic","Residual GAN","Absolute error")
for a,f,t in zip(ax,fields,titles):im=a.imshow(f,cmap="Blues");a.set_title(t);a.axis("off");fig.colorbar(im,ax=a,shrink=.7)
fig.tight_layout();path=ROOT/c["paths"]["figure"];path.parent.mkdir(parents=True,exist_ok=True);fig.savefig(path,dpi=140);plt.close(fig);print(path)