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

如何用xarray的sel、interp提取坐标对序列点而非二维数组

提取xarray Dataset中坐标对序列的对应数据(sel/interp方法优化)

我有一个xarray Dataset,想要提取坐标对序列(比如(x₁,y₁)、(x₂,y₂))对应的点数据。但用sel方法传入两组独立坐标时,会返回二维数组(这是方法的预期行为),不符合需求;同样,interp方法传入两组独立坐标也会得到二维插值结果,而非对应坐标对的插值序列。目前我通过列表推导式实现了需求,但希望直接用sel和interp方法完成。

原始示例问题

sel方法的问题示例

import xarray as xr
import numpy as np

ds = xr.Dataset(
    {'data': (('y', 'x'), np.linspace(1, 9, 9).reshape(3, 3))},
    coords={
        'x': [0, 1, 2],
        'y': [0, 1, 2]
    }
)

xx = np.array([0, 1])
yy = np.array([1, 2])
# 返回二维数组,而非坐标对对应的序列
print(ds.sel(x=xx, y=yy).data.values)
"""
[[4. 5.]
 [7. 8.]]
"""

# 列表推导式实现需求,但不够简洁
[ds.sel(x=x, y=y).data.item() for x, y in zip(xx, yy)]
"""
[4.0, 8.0]
"""

interp方法的问题示例

xx = np.array([0.25, 1.25])
yy = np.array([0.75, 1.75])

# 返回二维插值结果,而非坐标对对应的插值序列
ds.interp(x=xx, y=yy).data.values
"""
array([[3.5, 4.5],
       [6.5, 7.5]])
"""

# 列表推导式实现需求,但不够简洁
[ds.interp(x=x, y=y).data.item() for x, y in zip(xx, yy)]
"""
[3.5, 7.5]
"""

优化解决方案

针对sel方法的优化

通过给坐标数组添加统一的维度(比如points),让xarray自动对齐坐标对,避免生成笛卡尔积的二维网格:

xx = np.array([0, 1])
yy = np.array([1, 2])

# 给坐标新增统一的"points"维度,直接传入sel
result_sel = ds.sel(
    x=xr.DataArray(xx, dims='points'),
    y=xr.DataArray(yy, dims='points')
).data.values.tolist()

print(result_sel)  # 输出: [4.0, 8.0]

或者用更直观的points参数(xarray版本≥0.17.0支持):

# 构造包含坐标对的points维度
points = xr.DataArray(
    np.arange(len(xx)),
    dims='points',
    coords={'x': ('points', xx), 'y': ('points', yy)}
)
result_sel = ds.sel(points=points).data.values.tolist()

针对interp方法的优化

同样给插值坐标添加统一维度,让xarray按坐标对进行插值:

xx = np.array([0.25, 1.25])
yy = np.array([0.75, 1.75])

# 给坐标新增统一的"points"维度,直接传入interp
result_interp = ds.interp(
    x=xr.DataArray(xx, dims='points'),
    y=xr.DataArray(yy, dims='points')
).data.values.tolist()

print(result_interp)  # 输出: [3.5, 7.5]

原理说明

当sel或interp接收的坐标数组带有相同的自定义维度时,xarray会将对应位置的坐标配对处理,而非生成所有坐标组合的二维网格,这样就能直接得到每个坐标对对应的结果序列,无需循环调用方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 03:10:12