You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何直接迭代或访问xarray块?需保留坐标与维度信息

寻找迭代Xarray块的方法(带坐标维度信息)

我需要一种能迭代Xarray块的方法,类似dask.array.blocks,但要能直接访问带坐标和维度信息的Xarray块。

  • 我知道xarray.map_blocks的存在,但我的场景需要将输入块映射为形状未知的输出块,所以得通过直接循环Xarray块来实现自定义逻辑。
  • 我曾尝试查看xarray.map_blocks的源码,推测里面有类似的实现逻辑,但没搞懂具体运作机制。

实际场景补充

针对每个Xarray输入块,生成一个新维度(命名为foo)长度可变的输出Xarray块,最终沿foo维度拼接所有输出块。

以下是模拟场景代码,当前我通过从DataArray的每个dask块手动构建Xarray块(实现方式繁琐),再用client.map(fn_on_chunk, xarray_chunks)解决了问题:

n = 1000
x_raster = y_raster = np.arange(n)
time = np.arange(10)
vals_raster = np.arange(n*n*10).reshape(n, n, 10)
da_raster = xr.DataArray(vals_raster, coords={"y": y_raster, "x": x_raster, 'time':time})
da_raster = da_raster.chunk(dict(x=100, y=100))

def fn_on_chunk(da_chunk):

    # 模拟无法提前预知输出某一维度长度的情况
    len_range =  np.random.randint(10)
    outs = []
    
    for foo in range(len_range):
        # 模拟针对当前块执行逻辑,找到所需坐标
        x_chunk, y_chunk = fn_magic(foo)
        out = da_chunk.sel(x=x_chunk, y=y_chunk)
        out['foo'] = foo
        outs.append(out)
    
    return xr.concat(outs, dim='foo')

内容的提问来源于stack exchange,提问作者duff18

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 08:25:27