В приведенном ниже коде происходит 3 вещи, которые я бы хотел лучше контролировать.
r0
изменяется до размера r1
- * У 1008 * последний блок расширен как часть изменения размера. (Вывод набора данных некорректен для кусков - теперь он имеет 2 блока размером 4 и 12)
r0
преобразуется в число с плавающей точкой, поскольку NaN является отсутствующим значением.
Можно ли избежать изменения размеров массивов разных размеров вдоль измерения (что, возможно, занимает память и дисковое пространство)? Существует ли какая-либо разреженная реализация для этого случая, которая допускает пропущенные регионы?
Можно ли контролировать порцию? В этом случае я бы предпочел, чтобы порция была одинаковой по размеру (размер 4 ниже) и была одинаковой для всего набора данных.
Если нельзя избежать изменения размера, можно ли избежать неявного преобразования? Я вижу ссылки на fill_value в кодовой базе, но я упустил возможность увидеть, как это можно явно передать здесь.
import xarray as xr
import dask.array as da
import numpy as np
r0 = xr.DataArray(da.from_array(np.arange(8), chunks=4), coords=[('x', range(8))])
r1 = xr.DataArray(da.from_array(np.arange(16), chunks=4), coords=[('x', range(16))])
ds = xr.Dataset({'r0': r0, 'r1': r1})
print(ds)
print()
print(ds.r0.data.chunks)
<xarray.Dataset>
Dimensions: (x: 16)
Coordinates:
* x (x) int64 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Data variables:
r0 (x) float64 dask.array<chunksize=(4,), meta=np.ndarray>
r1 (x) int64 dask.array<chunksize=(4,), meta=np.ndarray>
((4, 12),)