Dataset.to_stacked_array(new_dim, sample_dims, variable_dim='variable', name=None)[source]#

Combine variables of differing dimensionality into a DataArray without broadcasting.

This method is similar to Dataset.to_array but does not broadcast the variables.

  • new_dim (hashable) – Name of the new stacked coordinate

  • sample_dims (Collection of hashables) – List of dimensions that will not be stacked. Each array in the dataset must share these dimensions. For machine learning applications, these define the dimensions over which samples are drawn.

  • variable_dim (hashable, default: "variable") – Name of the level in the stacked coordinate which corresponds to the variables.

  • name (hashable, optional) – Name of the new data array.


stacked (DataArray) – DataArray with the specified dimensions and data variables stacked together. The stacked coordinate is named new_dim and represented by a MultiIndex object with a level containing the data variable names. The name of this level is controlled using the variable_dim argument.


>>> data = xr.Dataset(
...     data_vars={
...         "a": (("x", "y"), [[0, 1, 2], [3, 4, 5]]),
...         "b": ("x", [6, 7]),
...     },
...     coords={"y": ["u", "v", "w"]},
... )
>>> data
Dimensions:  (x: 2, y: 3)
  * y        (y) <U1 'u' 'v' 'w'
Dimensions without coordinates: x
Data variables:
    a        (x, y) int64 0 1 2 3 4 5
    b        (x) int64 6 7
>>> data.to_stacked_array("z", sample_dims=["x"])
<xarray.DataArray 'a' (x: 2, z: 4)>
array([[0, 1, 2, 6],
       [3, 4, 5, 7]])
  * z         (z) object MultiIndex
  * variable  (z) object 'a' 'a' 'a' 'b'
  * y         (z) object 'u' 'v' 'w' nan
Dimensions without coordinates: x