TropiCycloneNet / scripts /result.py
zhangrenchao's picture
Publish TropiCycloneNet reproduction
01384b4 verified
Raw
History Blame Contribute Delete
1.23 kB
from pathlib import Path
import sys,numpy as np,torch
import matplotlib;matplotlib.use("Agg");import matplotlib.pyplot as plt
ROOT=Path(__file__).resolve().parents[1];sys.path.insert(0,str(ROOT))
from model.tropicyclonenet import *
c=load_config(ROOT);d=np.load(ROOT/c["paths"]["predictions"]);p=torch.from_numpy(d["prediction"]);t=torch.from_numpy(d["target"]);best=((p-t[:,None])**2).mean((2,3)).argmin(1);chosen=p[torch.arange(len(p)),best];track=haversine_km(chosen[...,:2],t[...,:2]).mean(0);pres=(abs(chosen[...,2]-t[...,2])*50).mean(0);wind=(abs(chosen[...,3]-t[...,3])*25).mean(0);write_json(ROOT/c["paths"]["evaluation"],{"track_mae_km":track.tolist(),"pressure_mae_hpa":pres.tolist(),"wind_mae_ms":wind.tolist(),"generators":int(p.shape[1]),"synthetic":True});fig,ax=plt.subplots(1,2,figsize=(9,3.5));ax[0].plot(d["lead_hours"],track,"o-");ax[0].set(xlabel="Lead (h)",ylabel="Track MAE (km)");ax[1].plot(t[0,:,0]*180,t[0,:,1]*90,"ko-",label="truth");ax[1].plot(chosen[0,:,0]*180,chosen[0,:,1]*90,"r.--",label="prediction");ax[1].legend();ax[1].set(xlabel="Longitude",ylabel="Latitude");fig.tight_layout();path=ROOT/c["paths"]["figure"];path.parent.mkdir(parents=True,exist_ok=True);fig.savefig(path,dpi=150);print(path)