迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Python >

Python 中的二维插值

作者:迹忆客 最近更新:2023/06/14 浏览次数:

本文展示了如何在 Python 中进行插值,并研究了不同的 2d 实现方法。 我们将讨论用于双变量插值的有用函数,例如 scipy.interpolate.interp2d、numpy.meshgrid 和 Python 中使用的用于平滑/插值 (RBF) 的径向基函数。

我们将使用 SciPy 和 Numpy 库实现插值,使其变得简单。


使用 scipy.interpolate.interp2d 在 Python 中创建二维插值

首先,让我们了解插值,这是一种在给定数据点之间构造数据点的技术。 假设有两个点,例如 1 和 2。

在此示例中,我们可以插值并找到点 1.22 和 1.44,等等。

机器学习中经常使用插值来填充数据集中缺失的数据,称为插补。 插值经常用于使数据集的点更均匀。

让我们看看使用 scipy.interpolate 模块在 Python 中处理插值示例。

interp2d 是 interp1d 函数的直接概括。 此函数将可用数据点的 x 和 y 坐标作为单独的一维数组,并将每对 x 和 y 坐标的值作为二维数组。

假定数据点位于规则且均匀的 x 和 y 坐标网格上。 一般函数形式如下。

class scipy.interpolate.interp2d(x, y, z, kind='linear', copy=True, bounds_error=False, fill_value=None)

其中 x、y 和 z 是数组,种类可以是 {'linear', 'cubic', 'quintic'} 或可以保留为可选。

#import libraries
import numpy as np
from scipy import interpolate
import matplotlib.pyplot as plt

# x,y arrays
x = np.arange(-5.01, 5.01, 0.25)
y = np.arange(-5.01, 5.01, 0.25)
xx, yy = np.meshgrid(x, y)  #see details below for 'np.meshgrid'

#approximate function which is z:= f(x,y)
z = np.sin(xx**2+yy**2)
fun = interpolate.interp2d(x, y, z, kind='linear') # kind could be {'linear', 'cubic', 'quintic'}
xnew = np.arange(-5.01, 5.01, 1e-2)
ynew = np.arange(-5.01, 5.01, 1e-2)
znew = fun(xnew, ynew)

plt.plot(x, z[0, :], 'go-', xnew, znew[0, :], 'b-')
plt.show()

输出:

scipy 插值 interp2d

请注意 ,我们使用了 numpy.meshgrid 来制作网格; 你可以用两个代表笛卡尔或矩阵索引的一维数组制作一个矩形网格。

一般函数形式如下。

numpy.meshgrid(*xi, copy=True, sparse=False, indexing='xy')

xi代表一维坐标数组x1,x2,…,xn。


使用 scipy.interpolate.Rbf 在 Python 中创建用于插值的径向基函数

此类插值用于n维散点数据的情况; 为此,我们使用 scipy.interpolate.Rbf。

import matplotlib.pyplot as plt
import numpy as np
from scipy.interpolate.rbf import Rbf  # radial basis functions

# x y arrays
x = [1, 1, 2 ,3, 4, 4, 2, 6, 7]
y = [0, 2, 5, 6, 2, 4, 1, 5, 2]
z = [1]*len(x)

#RBF Func
rbf_fun = Rbf(x, y, z, function='gaussian')

x_new = np.linspace(0, 8, 81)
y_new = np.linspace(0, 8, 82)

x_grid, y_grid = np.meshgrid(x_new, y_new)
z_new = rbf_fun(x_grid.ravel(), y_grid.ravel()).reshape(x_grid.shape)

plt.pcolor(x_new, y_new, z_new);
plt.plot(x, y, 'o');
plt.xlabel('x'); plt.ylabel('y');
plt.title('RBF Gaussian interpolation');

输出:

径向基函数

此类插值函数使用径向基函数 (RBF) 将 N-D 散点数据转换为 M-D。 可以使用 RBF 插值法对 n 维的散乱数据进行平滑和插值。

不过,由于存在外推的可能性,例如获取数据范围之外的值,因此应谨慎进行。

上一篇:Python 中的 3D 插值

下一篇:没有了

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

Python 中的 3D 插值

发布时间:2023/06/13 浏览次数:121 分类:Python

插值是在离散集的定义范围内构造新数据点的方法。 插值意味着找到点或曲线之间的值。从数学的角度来看,插值是获取位于其他已知数据点之间的特定未知数据点的值。插值的重要性

在 Python 中重新抛出异常

发布时间:2023/06/13 浏览次数:53 分类:Python

Python 为我们提供了 try-except 块来处理程序中的异常。 它还为我们提供了 raise 语句来手动抛出异常。本文将讨论如何在 Python 程序中重新抛出异常。在 Python 中抛出异常

Python 模拟引发异常

发布时间:2023/06/13 浏览次数:160 分类:Python

本文的主要目的是演示如何在使用单元测试库 unittest 时抛出异常。在 Python 中使用单元测试库 unittest 时抛出异常

Python打开文件异常处理

发布时间:2023/06/13 浏览次数:146 分类:Python

要打开文件,Python 有一个名为 open() 的内置函数,用户可以通过它读取或写入文件,但是如果在任何情况下文件丢失或编译器无法访问,那么,我们 遇到 FileNotFoundError。 本文将介绍如何处理

Python 绘图 CSV

发布时间:2023/06/13 浏览次数:67 分类:Python

CSV 代表逗号分隔值,一种存储结构化数据的流行格式。 CSV 文件包含具有行和列的表格形式的数据。我们经常需要可视化存储在 CSV 文件中的数据。 为此,Python 提供了不同类型的数据可视化图

Python 绘制决策边界

发布时间:2023/06/13 浏览次数:52 分类:Python

为此,我们将使用 Sklearn 库提供的内置预处理数据(无缺失数据或异常值)数据集包来绘制数据的决策边界。 然后我们将使用 Matplotlib 的库来绘制决策边界。

Python 中的 Soundex

发布时间:2023/06/13 浏览次数:184 分类:Python

Python 的 soundex 函数是将文本字符串转换为 Soundex 代码的函数。 它有助于在数据库中索引名称或查找相似名称。名字的 Soundex 代码是基于它的发音,而不是它的拼写。 它是比较发音不同但拼写准

Python 读取 Outlook 电子邮件

发布时间:2023/06/13 浏览次数:171 分类:Python

本文将讨论如何借助 win32com.client 模块从 outlook 应用程序读取电子邮件。 我们还学习了如何在 Python 中过滤具有不同属性的电子邮件。使用 win32com.client 模块从 Outlook 应用程序读取电子邮件

Python 多处理日志记录

发布时间:2023/06/13 浏览次数:150 分类:Python

本文将讨论 multiprocessing 的概念。 在此之后,我们将讨论 Python 中的多处理和使用 Python 代码进行多处理的日志处理。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便