@@ -712,15 +712,15 @@ def _rank_da(da: xr.DataArray) -> np.ndarray:
712
712
713
713
@dataclasses .dataclass
714
714
class GaussianCRPS (Metric ):
715
- """The spread measure associated with CRPS, E|X - X'| ."""
715
+ """The analytical formulation of CRPS for a Gaussian ."""
716
716
717
717
def compute_chunk (
718
718
self ,
719
719
forecast : xr .Dataset ,
720
720
truth : xr .Dataset ,
721
721
region : t .Optional [Region ] = None ,
722
722
) -> xr .Dataset :
723
- """CRPSSpread , averaged over space, for a time chunk of data."""
723
+ """GaussianCRPS , averaged over space, for a time chunk of data."""
724
724
return _spatial_average (
725
725
_pointwise_gaussian_crps (forecast , truth ),
726
726
region = region ,
@@ -770,6 +770,33 @@ def _pointwise_gaussian_crps(
770
770
return xr .Dataset (dataset , coords = forecast .coords )
771
771
772
772
773
+ @dataclasses .dataclass
774
+ class GaussianVariance (Metric ):
775
+ """The variance of a Gaussian forecast."""
776
+
777
+ def compute_chunk (
778
+ self ,
779
+ forecast : xr .Dataset ,
780
+ truth : xr .Dataset ,
781
+ region : t .Optional [Region ] = None ,
782
+ ) -> xr .Dataset :
783
+ """GaussianVariance, averaged over space, for a time chunk of data."""
784
+ del truth # unused
785
+ var_list = []
786
+ dataset = {}
787
+ for var in forecast .keys ():
788
+ if f"{ var } _std" in forecast .keys ():
789
+ var_list .append (var )
790
+ for var_name in var_list :
791
+ variance = forecast [f"{ var_name } _std" ] * forecast [f"{ var_name } _std" ]
792
+ dataset [var_name ] = variance
793
+
794
+ return _spatial_average (
795
+ xr .Dataset (dataset , coords = forecast .coords ),
796
+ region = region ,
797
+ )
798
+
799
+
773
800
@dataclasses .dataclass
774
801
class EnsembleStddevSqrtBeforeTimeAvg (EnsembleMetric ):
775
802
"""The standard deviation of an ensemble of forecasts.
0 commit comments