ScaleAdaptiveCM / scripts /result.py
zhangrenchao's picture
Publish ScaleAdaptiveCM reproduction
90cbf31 verified
Raw
History Blame Contribute Delete
1.36 kB
from pathlib import Path
import sys
import 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.scale_adaptive_cm import load_config,radial_spectrum,write_json
c=load_config(ROOT);d=np.load(ROOT/c["paths"]["predictions"]);p,t=d["mean"],d["target"];err=p-t
mae=float(np.mean(abs(err)));rmse=float(np.sqrt(np.mean(err**2)));corr=float(np.corrcoef(p.ravel(),t.ravel())[0,1]);psp,psT=radial_spectrum(p[0,0]),radial_spectrum(t[0,0]);n=min(len(psp),len(psT));psd=float(np.mean(abs(np.log1p(psp[:n])-np.log1p(psT[:n]))))
members=d["members"][:,0,0];obs=t[0,0];crps=float(np.mean(abs(members-obs))-0.5*np.mean(abs(members[:,None]-members[None,:])))
write_json(ROOT/c["paths"]["evaluation"],{"mae_mm_day":mae,"rmse_mm_day":rmse,"large_scale_correlation":corr,"log_psd_mae":psd,"ensemble_crps":crps,"synthetic":True})
fig,ax=plt.subplots(1,4,figsize=(14,3.4));fields=(d["low"][0,0],t[0,0],p[0,0],abs(err[0,0]));titles=("Low resolution","Target","CM mean","Absolute error")
for a,f,title in zip(ax,fields,titles):im=a.imshow(f,cmap="viridis");a.set_title(title);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)