DimensionalData

DimensionalData.jl provides tools and abstractions for working with datasets that have named dimensions, and optionally a lookup index.

DimensionalData is a pluggable, generalised version of AxisArrays.jl with a cleaner syntax, and additional functionality found in NamedDims.jl. It has similar goals to pythons xarray, and is primarily written for use with spatial data in Rasters.jl.

Goals

  • Clean, readable syntax. Minimise required parentheses, minimise of exported
  • Zero-cost dimensional indexing a[Y(4), X(5)] of a single value. methods, and instead extend Base methods whenever possible.
  • Plotting is easy: data should plot sensibly and correctly with useful labels, by default.
  • Least surprise: everything works the same as in Base, but with named dims. If a method accepts numeric indices or dims=X in base, you should be able to use DimensionalData.jl dims.
  • Minimal interface: implementing a dimension-aware type should be easy.
  • Maximum extensibility: always use method dispatch. Regular types over special syntax. Recursion over @generated. Always dispatch on abstract types.
  • Type stability: dimensional methods should be type stable more often than Base methods
  • Functional style: structs are always rebuilt, and other than the array data, fields are not mutated in place.

For package developers

Data types and the interface

DimensionalData.jl provides the concrete DimArray type. But its behaviours are intended to be easily applied to other array types.

??? question "more" The main requirement for extending DimensionalData.jl is to define a `dims` method that returns a `Tuple` of `Dimension` that matches the dimension order and axis values of your data. Define `rebuild` and base methods for `similar` and `parent` if you want the metadata to persist through transformations (see the `DimArray` and `AbstractDimArray` types). A `refdims` method returns the lost dimensions of a previous transformation, passed in to the `rebuild` method. `refdims` can be discarded, the main loss being plot labels and ability to reconstruct dimensions in `cat`. Inheriting from `AbstractDimArray` in this way will give nearly all the functionality of using `DimArray`.

LookupArrays and Dimensions

Sub modules LookupArrays and Dimensions define the behviour of dimensions and their lookup index.

LookupArrays and Dimensions