python2d 平滑插值处理_python - 如何使用scipy执行二维插值?

本文对比了Python中三种二维插值方法——interp2d、griddata和Rbf在平滑插值任务中的表现,包括上采样和平滑函数插值。通过对不同函数和数据集的测试,展示了它们的优缺点,如interp2d可能引入的偏差,griddata在外推时的行为,以及Rbf在保持对称性和外推方面的优势。对于小数据集,选择合适的插值方法至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

免责声明:我主要是在写这篇文章时考虑到语法因素和一般行为。 我不熟悉所描述的方法的内存和CPU方面,我将这个答案的目标对准那些拥有相当小的数据集的人,这样插值的质量可能是需要考虑的主要方面。 我知道,在处理非常大的数据集时,性能更好的方法(即interp2d和griddata)可能不可行。

我将比较三种多维插值方法(interp2d / splines,interp2d和interp2d)。 我将使它们受到两种插值任务和两种底层函数(要插入的点)。 具体的例子将展示二维插值,但可行的方法适用于任意维度。 每种方法都提供各种插值; 在所有情况下,我将使用三次插值(或close1)。 重要的是要注意,无论何时使用插值,都会引入与原始数据相比的偏差,并且所使用的特定方法会影响最终的工件。 始终注意这一点,并负责任地插入。

两个插值任务将是

上采样(输入数据在矩形网格上,输出数据在更密集的网格上)

将散乱数据插值到规则网格上

这两个函数(通过域interp2d)将是

流畅友好的功能:interp2d; 范围在griddata

一个邪恶的(特别是非连续的)函数:interp2d,原点附近的值为0.5; 范围在griddata

这是他们看起来的样子:

我将首先演示这三种方法在这四种测试中的表现,然后我将详细介绍这三种方法的语法。 如果您知道对方法的期望,您可能不想浪费时间学习它的语法(看着你,interp2d)。

测试数据

为了显而易见,这里是我生成输入数据的代码。 虽然在这种特殊情况下我显然知道数据的基础功能,但我只会用它来为插值方法生成输入。 为方便起见,我使用numpy(主要用于生成数据),但仅仅scipy就足够了。

import numpy as np

import scipy.interpolate as interp

# auxiliary function for mesh generation

def gimme_mesh(n):

minval = -1

maxval = 1

# produce an asymmetric shape in order to catch issues with transpositions

return np.meshgrid(np.linspace(minval,maxval,n), np.linspace(minval,maxval,n+1))

# set up underlying test functions, vectorized

def fun_smooth(x, y):

return np.cos(np.pi*x)*np.sin(np.pi*y)

def fun_evil(x, y):

# watch out for singular origin; function has no unique limit there

return np.where(x**2+y**2>1e-10, x*y/(x**2+y**2), 0.5)

# sparse input mesh, 6x7 in shape

N_sparse = 6

x_sparse,y_sparse = gimme_mesh(N_sparse)

z

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值