大家好,又见面了,我是你们的朋友全栈君。
SciPy的interpolate模块提供了许多对数据进行插值运算的函数,范围涵盖简单的一维插值到复杂多维插值求解。
注:一维插值这里就不再讲述了,主要是对二维插值的一个总结。
from scipy.interpolate import interp2d
interp2d(x,y,z,kind='linear')
这里有几个注意事项:
Rbf的优点是,排列可以无序,可以不是等距的网格。
from scipy.interpolate import Rbf
func = Rbf(x, y, z, function='linear') # 插值
z_new = func(x1, y1)
x,y,z实际的数据,都是一维数组
function为插值方法,有‘linear’,‘cubic’等
x1,y1为网格数据,z_new为插值后的数据,都是二维的
由于我们必须将 2d 点作为形状为 (N, 2) 的数组传递,因此我们必须展平输入网格并堆叠两个展平的阵列。 构造的插值器也需要这种格式的查询点,结果将是一个形状为 (N,) 的一维数组,我们必须重新整形以匹配我们的二维网格以进行绘图。 由于 Rbf 不对输入点的维数做任何假设,因此它支持插值的任意维数。 所以,scipy.interpolate.Rbf
from scipy.interpolate import griddata
griddata(points,values,xi,method =‘linear’,fill_value = nan,rescale = False )
参数:
points:数据点坐标。可以是形状(n,D)的数组,也可以是ndim数组的元组。(已知点)
values:浮点或复数的ndarray,形状(n,)的数据值。(已知点对应的值)
xi : 浮点数的二维数组或一维数组的元组,形状(M,D)插值数据的点。(被划分后的网格)
method:‘linear’,‘nearest’,‘cubic’,可选其中的插值方法之一。(插值方式)
{
nearest 返回最接近插值点的数据点的值。
linear 将输入点设置为n维单纯形,并在每个单形上线性插值。
cubic (1-d) 返回由三次样条确定的值。
cubic (2-d) 返回由分段立方,连续可微(C1)和近似曲率最小化多项式表面确定的值。
}
fill_value : float,可选。用于填充输入点凸包外部的请求点的值。如果未提供,则默认为nan。此选项对“最近”方法无效。
rescale : bool,可选。在执行插值之前,重新缩放指向单位立方体。如果某些输入维度具有不可比较的单位并且相差很多个数量级,则这非常有用。
注:不考虑内存,CPU,只针对相当小的数据集,主要考虑插值的质量。
Rbf 内插的一个缺点是内插 N 个数据点涉及对 N x N 矩阵求逆。 这种二次复杂性非常迅速地破坏了大量数据点的内存需求。 但是,新的 RBFInterpolator 类还支持邻居关键字参数,该参数将每个径向基函数的计算限制为 k 个最近的邻居,从而减少内存需求。
z_dense_smooth_griddata = interp.griddata((x_sparse.ravel(), y_sparse.ravel()),
z_sparse_smooth.ravel(), (x_dense, y_dense), method='cubic')
输出点数组可以指定为任意维度数组的元组(如上述两个片段),这为我们提供了更大的灵活性。 简而言之,scipy.interpolate.griddata
站点数据插值:地图网格插值:
olon = np.linspace(108,115,97)
olat = np.linspace(24,31,97)
olon,olat = np.meshgrid(olon,olat)
from scipy.interpolate import Rbf
)
func = Rbf(lon,lat,data,function=‘linear‘)
rain_data_new = func(olon,olat)
rain_data_new = griddata((lon,lat), data, (olon,olat), method='linear')
注:由于Rbf插值要求矩阵可逆,所以在经纬度列表时,不能有相同的两行。
参考: Python+matplotlib+scipy站点数据绘制气象分布图(示例代码) https://stackoverflow.com/questions/37872171/how-can-i-perform-two-dimensional-interpolation-using-scipy
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/141556.html原文链接:https://javaforall.cn