如何重塑xarray Dataset?新增shot维度拆分原x维度
重塑xarray.Dataset新增shot维度
你可以直接用xarray内置的reshape方法实现维度重组,步骤如下:
- 确认原数据集的
x维度长度正好等于shot数量 × 单炮集x维度长度(这里200×1201=240200,完全匹配) - 调用
reshape方法,将原x维度拆分为shot和新的x维度:
# 执行维度重塑 seisnc_2d_reshaped = seisnc_2d.reshape(x=("shot", "x"), shot=200, x=1201)
完成后,新数据集的维度就是shot:200, x:1201, y:2001,你可以直接用seisnc_2d_reshaped.isel(shot=n)索引第n个炮集(注意xarray索引从0开始,如果你习惯从1开始取炮集,需要用shot=n-1)。
如果reshape方法无法满足需求(比如需要保留原x坐标信息),可以通过构建多级索引再拆分的方式实现:
import pandas as pd import xarray as xr # 构建shot和单炮内x的坐标 shot_idx = range(200) x_in_shot_idx = range(1201) # 给原x维度设置多级索引(shot + x) seisnc_2d = seisnc_2d.assign_coords( x=pd.MultiIndex.from_product( [shot_idx, x_in_shot_idx], names=["shot", "x"] ) ) # 拆分多级索引为独立维度 seisnc_2d_reshaped = seisnc_2d.unstack("x")
这种方式会保留每个维度的坐标信息,适合需要后续基于坐标做筛选的场景。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

