作者:nashiyizhiyu_847_695 | 来源:互联网 | 2024-11-14 15:10
我有一组模拟数据(存储在2D NumPy数组中),这些数据来自不同的模型,因此每个模型的分辨率各不相同。例如,一些模拟数据的尺寸如下:
> 1159 x 1367
> 144 x 157
> 72 x 82
> 446 x 500
> 135 x 151
我的目标是将所有数据转换为相同的分辨率,例如144 x 157。为了实现这一目标,需要进行插值处理。我在研究以下几种方法:
> scipy.interpolate.griddata
> scipy.ndimage.interpolation.zoom
> scipy.interpolate.RegularGridInterpolator
> scipy.ndimage.interpolation.map_coordinates
其中,RegularGridInterpolator
和 map_coordinates
看起来最适合解决这个问题,但我不确定如何使用它们生成指定分辨率的新网格化数据。
最终,我发现可以使用 RegularGridInterpolator
来实现这一目标:
import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import RegularGridInterpolator
def regrid(data, out_x, out_y):
m = max(data.shape[0], data.shape[1])
y = np.linspace(0, 1.0/m, data.shape[0])
x = np.linspace(0, 1.0/m, data.shape[1])
interpolating_function = RegularGridInterpolator((y, x), data)
yv, xv = np.meshgrid(np.linspace(0, 1.0/m, out_y), np.linspace(0, 1.0/m, out_x))
return interpolating_function((xv, yv))
通过上述代码,可以将不同分辨率的数据转换为指定的分辨率。例如,将一个1159 x 1367的数据转换为144 x 157的分辨率。