xskillscore.mape(a, b, dim=None, weights=None, skipna=False, keep_attrs=False)

Mean Absolute Percentage Error.

\[\mathrm{MAPE} = \frac{1}{n} \sum_{i=1}^{n} \frac{\vert a_{i} - b_{i} \vert} {max(\epsilon, \vert a_{i} \vert)}\]


The percent error is calculated in reference to a. Percent error is reported as decimal percent. I.e., a value of 1 is 100%. \(\epsilon\) is an arbitrary small yet strictly positive number to avoid undefined results when a is zero.

  • a (xarray.Dataset or xarray.DataArray) – Labeled array(s) over which to apply the function. (Truth which will be divided by)

  • b (xarray.Dataset or xarray.DataArray) – Labeled array(s) over which to apply the function.

  • dim (str, list) – The dimension(s) to apply mape along. Note that this dimension will be reduced as a result. Defaults to None reducing all dimensions.

  • weights (xarray.Dataset or xarray.DataArray or None) – Weights matching dimensions of dim to apply during the function.

  • skipna (bool) – If True, skip NaNs when computing function.

  • keep_attrs (bool) – If True, the attributes (attrs) will be copied from the first input to the new one. If False (default), the new object will be returned without attributes.


Mean Absolute Percentage Error.

Return type

xarray.Dataset or xarray.DataArray




>>> a = xr.DataArray(np.random.rand(5, 3, 3), dims=['time', 'x', 'y'])
>>> b = xr.DataArray(np.random.rand(5, 3, 3), dims=['time', 'x', 'y'])
>>> xs.mape(a, b, dim='time')
<xarray.DataArray (x: 3, y: 3)>
array([[0.6268041 , 9.45134297, 3.28717608],
       [0.27099746, 1.58105176, 1.48258713],
       [6.55806162, 0.22271096, 0.39302745]])
Dimensions without coordinates: x, y