首页 > 解决方案 > 更改一个 DataArray 的分辨率以匹配另一个

问题描述

我有两个 DataArrays 要合并到一个 DataSet 中以供后续分析。

DataArrays 具有相同的扩展名但不同的分辨率。如何更改第一个 DataArray 的分辨率以匹配第二个 DataArray 的分辨率(例如使用双线性插值或最近邻)?

这是一个代表:

import matplotlib.pyplot as plt
import numpy as np
import xarray as xr

data1 = np.random.random((37, 33, 8))
da1 = xr.DataArray(data1, dims = ['longitude', 'latitude', 'time'], name='foo1')

data2 = np.random.random((41, 48, 8))
da2 = xr.DataArray(data2, dims = ['longitude', 'latitude', 'time'], name='foo2')

# SOME OPERATIONS HERE

ds = xr.merge([da1, da2])

标签: pythonpython-xarray

解决方案


我在 xarray 文档(http://xarray.pydata.org/en/stable/interpolation.html)中找到了一个非常有用的示例,它表明使用 interp() 可以像这样

import matplotlib.pyplot as plt
import numpy as np
import xarray as xr

data1 = np.random.random((37, 33, 8))
da1 = xr.DataArray(data1, dims = ['longitude', 'latitude', 'time'], name='foo1')

data2 = np.random.random((41, 48, 8))
da2 = xr.DataArray(data2, dims = ['longitude', 'latitude', 'time'], name='foo2')

# Interpolate da1 to match da2 resolution
new_lon = np.linspace(da1.longitude[0], da1.longitude[-1], da2.sizes['longitude'])
new_lat = np.linspace(da1.latitude[0], da1.latitude[-1], da2.sizes['latitude'])
da1_interpolated = da1.interp(latitude = new_lat, longitude = new_lon)
da1_interpolated

# Merge DataArrays into DataSet
ds = xr.merge([da1_interpolated, da2])

推荐阅读