xrspatial.classify.quantile

xrspatial.classify.quantile(agg: xarray.core.dataarray.DataArray, k: int = 4, name: Optional[str] = 'quantile') xarray.core.dataarray.DataArray[source]

Reclassifies data for array agg into new values based on quantile groups of equal size.

Parameters
  • agg (xarray.DataArray) – 2D NumPy, CuPy, NumPy-backed Dask, or Cupy-backed Dask array of values to be reclassified.

  • k (int, default=4) – Number of quantiles to be produced.

  • name (str, default='quantile') – Name of the output aggregate array.

Returns

quantile_agg – 2D aggregate array, of quantile allocations. All other input attributes are preserved.

Return type

xarray.DataArray, of the same type as agg

Notes

  • Dask’s percentile algorithm is approximate, while numpy’s is exact.

  • This may cause some differences between results of vanilla numpy

and dask version of the input agg. (https://github.com/dask/dask/issues/3099) # noqa

References

Examples

import numpy as np
import xarray as xr
import dask.array as da
from xrspatial.classify import quantile

elevation = np.array([
    [np.nan,  1.,  2.,  3.,  4.],
    [ 5.,  6.,  7.,  8.,  9.],
    [10., 11., 12., 13., 14.],
    [15., 16., 17., 18., 19.],
    [20., 21., 22., 23., np.inf]
])
data = xr.DataArray(elevation, attrs={'res': (10.0, 10.0)})
data_quantile = quantile(data, k=5)
>>> print(data)
<xarray.DataArray (dim_0: 5, dim_1: 5)>
array([[nan,  1.,  2.,  3.,  4.],
       [ 5.,  6.,  7.,  8.,  9.],
       [10., 11., 12., 13., 14.],
       [15., 16., 17., 18., 19.],
       [20., 21., 22., 23., inf]])
Dimensions without coordinates: dim_0, dim_1
Attributes:
    res:      (10.0, 10.0)

>>> print(data_quantile)
<xarray.DataArray 'quantile' (dim_0: 5, dim_1: 5)>
array([[nan,  0.,  0.,  0.,  0.],
       [ 0.,  1.,  1.,  1.,  1.],
       [ 2.,  2.,  2.,  2.,  2.],
       [ 3.,  3.,  3.,  3.,  4.],
       [ 4.,  4.,  4.,  4., nan]], dtype=float32)
Dimensions without coordinates: dim_0, dim_1
Attributes:
    res:      (10.0, 10.0)