Как можно загрузить сотни больших растров в xarray? - PullRequest
0 голосов
/ 21 февраля 2020

Общая проблема c заключается в том, что загрузка большого количества растров с помощью xarray.open_rasterio и их объединение часто приводят к ошибкам памяти, когда растры велики. Это также может зависеть от того, как вы разделяете данные на части.

Если говорить более конкретно, в моем случае каждый растр представляет день, и я хотел бы, чтобы фрагменты охватывали всю временную ось, чтобы я мог легко выполнять операции с временными рядами. Сами растры не очень большие, но мне нужно пересчитать их до более точного пространственного разрешения. Ниже показано, как я пытался и не смог выполнить sh этого.

import rasterio as rio
from rasterio.vrt import WarpedVRT
import xarray as xr

dates = [...]
image_paths = [...]
vrt_options = {...}    

def make_vrt(path):
    with rio.open(str(path)) as ds:
        with WarpedVRT(ds, **vrt_options) as vrt:
            return vrt

data_arrays = [xr.open_rasterio(make_vrt(p), chunks={'band': -1, 'x': 1500, 'y': 1500}) for p in image_paths]
data_array = xr.concat(data_arrays, dim='band')
data_array = data_array.chunk({'band': -1})
data_array = data_array.assign_coords(band=dates)
data_array = data_array.rename({'band': 'time'})

# Compute something like a groupby and sum

Каждый растр в моем случае имеет форму (178, 151) с блоками 128x128 и перепроектируется и пересэмплируется в (17225). , 9952).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...