agregar dimensión a un xarray DataArray

Necesito agregar una dimensión a un DataArray , llenando los valores a través de la nueva dimensión. Aquí está la matriz original.

 a_size = 10 a_coords = np.linspace(0, 1, a_size) b_size = 5 b_coords = np.linspace(0, 1, b_size) # original 1-dimensional array x = xr.DataArray( np.random.random(a_size), coords=[('a', a coords)]) 

Supongo que podría crear un DataArray vacío con la nueva dimensión y copiar los datos existentes en.

 y = xr.DataArray( np.empty((b_size, a_size), coords=([('b', b_coords), ('a', a_coords)]) y[:] = x 

Una mejor idea podría ser usar concat . Me tomó un tiempo descubrir cómo especificar tanto las atenuaciones como las coordenadas para la dimensión de concat, y ninguna de estas opciones parece grande. ¿Hay algo que me esté perdiendo que pueda hacer esta versión más limpia?

 # specify the dimension name, then set the coordinates y = xr.concat([x for _ in b_coords], 'b') y['b'] = b_coords # specify the coordinates, then rename the dimension y = xr.concat([x for _ in b_coords], b_coords) y.rename({'concat_dim': 'b'}) # use a DataArray as the concat dimension y = xr.concat( [x for _ in b_coords], xr.DataArray(b_coords, name='b', dims=['b'])) 

Sin embargo, ¿hay una mejor manera de hacerlo que cualquiera de las dos opciones anteriores?

    Debido a la forma en que se aplican las matemáticas a las nuevas dimensiones, me gusta multiplicar para agregar nuevas dimensiones.

     identityb = xr.DataArray(np.ones_like(b_coords), coords=[('b', b_coords)]) y = x * identityb 

    Ha realizado un análisis bastante exhaustivo de las opciones actuales y, de hecho, ninguna de ellas es muy clara.

    Esta sería ciertamente una funcionalidad útil para escribir para xarray, pero nadie ha implementado todavía. Tal vez usted estaría interesado en ayudar?

    Vea este problema de GitHub para algunas propuestas de API: https://github.com/pydata/xarray/issues/170