| 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) |