并行处理输出未对齐或类型不同的 xarray 数据集

问题描述

简介
我通过使用 dask client.map 将一组函数映射到图像并返回一个 Pandas 数据帧来并行处理多个图像。我无法在计算之前预测输出的大小。

为了使代码更具可读性,并且不必在计算图像元数据中拖来拖去,我一直在查看 xarray

我通过使用 .zarropen_mfdataset 加载 parallel=True 文件来创建数据集。 这是创建一个类似于我正在使用的模拟数据集的片段

import xarray as xr
from dask import array as da
import numpy as np 
# Create data array
def create_mock_dataset():
    data = da.random.random([2,3,2,10,10])
    mock_array = xr.DataArray(
        data=data,coords={
            "fov":np.arange(2),"round_num": np.arange(3),'z':np.arange(2),'r':np.arange(10),'c':np.arange(10),},dims=["fov","round_num","z","r","c"])
    ds = xr.Dataset({"mock": mock_array})
    chunks_dict = {'fov':1,'round_num':1,'z':2,'r':10,'c':10}
    ds = ds.chunk(chunks_dict)
    return ds


test_dataset = create_mock_dataset()


def chunk_processing_func(xarray_chunk):
    # processing of the chunk
    # reduced to different shape or
    # data structure ex. pandas dataframe
    mock_output = np.arange(200) # can a dataframe or another data structure
    return mock_output


我想并行处理每个块(对应于图像)并利用 xarray 中的 coords 数据。 我一直在测试 apply_ufunc (按照这个非常清晰的 answer 中的说明)或 map_blocks 但如果我理解正确,输出的大小必须是已知的。

那么,使用坐标信息和数据但返回不需要与数据集对齐的不同类型输出函数,处理并行 xarray 数据集的最佳方法是什么?

谢谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)