如何解决并行处理输出未对齐或类型不同的 xarray 数据集
简介。
我通过使用 dask
client.map
将一组函数映射到图像并返回一个 Pandas 数据帧来并行处理多个图像。我无法在计算之前预测输出的大小。
为了使代码更具可读性,并且不必在计算图像元数据中拖来拖去,我一直在查看 xarray
。
我通过使用 .zarr
和 open_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 举报,一经查实,本站将立刻删除。