添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

1.插值scipy.interpolate

SciPy的interpolate模块提供了许多对数据进行插值运算的函数,范围涵盖简单的一维插值到复杂多维插值求解。

  1. 一维插值:当样本数据变化归因于一个独立的变量时;
  2. 多维插值:反之样本数据归因于多个独立变量时。

注:一维插值这里就不再讲述了,主要是对二维插值的一个总结。

2.interp2d()

from scipy.interpolate import interp2d
interp2d(x,y,z,kind='linear')

这里有几个注意事项:

  1. interp2d()中,输入的x,y,z先用ravel()被转成了一维数组
  2. func()的输入必须是一维的,输出是二维的(有点奇怪,感觉完成度不高)
  3. 插值的源数据必须是等距网格。不然的haul,运行不保存但结果不对。

3.Rbf()

Rbf的优点是,排列可以无序,可以不是等距的网格。

  1. 随机生成点,并计算函数值
  2. 插值(输入输出都是二维
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

  1. 即使对于疯狂的输入数据也能产生良好的输出
  2. 支持更高维度的插值
  3. 在输入点的凸包外外推(当然外推总是一场赌博,您通常根本不应该依赖它)
  4. 创建一个插值器作为第一步,因此在不同的输出点对其进行评估会减少额外的工作量
  5. 可以有任意形状的输出点数组(与被限制为矩形网格相反,见下文)
  6. 更有可能保持输入数据的对称性
  7. 支持关键字核的多种径向函数:multiquadric、inverse_multiquadric、inverse_quadratic、gaussian、linear、cubic、quintic、thin_plate_spline(默认)。从 SciPy 1.7.0 开始,由于技术原因,该类不允许传递自定义可调用项,但这可能会在未来版本中添加。
  8. 可以通过增加平滑参数给出不精确的插值

4. griddata()

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,可选。在执行插值之前,重新缩放指向单位立方体。如果某些输入维度具有不可比较的单位并且相差很多个数量级,则这非常有用。

5.二维插值griddata和Rbf对比

注:不考虑内存,CPU,只针对相当小的数据集,主要考虑插值的质量。

  1. griddata基于提供的点的Delaunay三角部分。然后将数据插值到每个单元(三角形)上。例如,对于2D函数和线性插值,三角形内部的值是经过三个相邻点的平面。
  2. rbf通过为每个提供的点分配一个径向函数来工作。“径向”表示该功能仅取决于到该点的距离。任何点的值都是通过所有提供的点的加权贡献之和得出的。只要定义了距离函数,该方法就不管变量空间的大小都适用。

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

  1. 即使对于疯狂的输入数据也能产生良好的输出
  2. 支持更高维度的插值
  3. 不执行外推,可以为输入点凸包外的输出设置单个值(参见fill_value)
  4. 在单个调用中计算内插值,因此从头开始探测多组输出点
  5. 可以有任意形状的输出点
  6. 支持任意维度的最近邻和线性插值,1d 和 2d 中的三次。最近邻和线性插值分别在引擎盖下使用 NearestNDInterpolator 和 LinearNDInterpolator。 1d 三次插值使用样条,2d 三次插值使用 CloughTocher2DInterpolator 构造一个连续可微的分段三次插值器。
  7. 可能违反输入数据的对称性

6.插值举例

站点数据插值:地图网格插值

  1. 取经纬度:lon,lat (经纬度数组,n)

  2. 取站点的观测数据集:data  (这个数据维度与站点数量同,即1*n)

  3. 准备两个列表用于构造网格矩阵:
    olon = np.linspace(108,115,97)
    olat = np.linspace(24,31,97)

  4. 构造网格矩阵
    olon,olat = np.meshgrid(olon,olat)

  5. 做插值:(需要到入Rbf函数:from scipy.interpolate import Rbf
    func = Rbf(lon,lat,data,function=‘linear‘)
    rain_data_new = func(olon,olat)

  6. 或griddata插值
    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

1.插值scipy.interpolateSciPy的interpolate模块提供了许多对数据进行插值运算的函数,范围涵盖简单的一维插值到复杂多维插值求解。一维插值:当样本数据变化归因于一个独立的变量时;多维插值:反之样本数据归因于多个独立变量时。注:一维插值这里就不再讲述了,主要是对二维插值的一个总结。2.interp2d()from scipy.interpolate import interp2dinterp2d(x,y,z,kind='linear')这里有几个注意事项:
scipy.interpolate包含了python中常用的插值函数,包含一维到多维,本文介绍两种三维插值函数interpn和griddata 两个函数的区别在于原始数据的类型,或者说完整程度。如果原始数据在每个维度的每个水平上均有函数值,即网格类数据,可采用interpn函数。若原始数据是一系列散点,并无严格的规律可言,则只能采用griddata函数。 interpn函数 首先给出该函数的帮助文档: Help on function interpn in module scipy.interpolate.
该算法的灵感来自于 John D'Errico 的工作https://www.mathworks.com/matlabcentral/fileexchange/4551-inpaint_nans 但是,我确实注意到,与 griddata 相比,John D'Ericco 给出的 inpaint_nans 算法提供了更高的梯度。 因此,该算法提供了另一种解决方案,有些人可能会觉得它很有帮助。
通常来说,一维插值有很多方法,也比较容易实现。griddata()函数则是可以方便实现二维插值。 例:图中有9个网格点,横坐标为a,纵坐标为b,蓝色的数字是这个点的函数值。 (不好意思,例子比较简单,我直接手画了) 由于整个网格由离散点组成,当我们想知道 (1.5, 1.5) 或者 (2.5, 2.5) 的坐标值的时候,是无法直接获取的,只能通过二维的插值来得到,如下图。 这个时候就可以采用griddata()函数,代码如下: import numpy as np from scipy.
在数学建模建立方格状态地图中,使用scipy.interpolate.griddata()插值法遇到了一些问题,经过查阅官方文档和其他的一些博文,发现解释的不是很好,所以来补充补充 1、matlab的griddata()与pythonscipy.interpolate.griddata()使用方法不同导致的报错 2、切片的时候,保存有原来数据的行索引导致的报错 3、数组的shape为(2, N)导致的报错 官方文档解释 链接:http://scipy.github.io/devdocs/ref
### 回答1: scipy.interpolate.griddata是一个用于在非规则网格上进行插值的函数。它可以通过三角剖分或K-D树方法来计算插值结果,并且支持线性、立方和样条插值。该函数可以用于处理二维或三维数据,并且可以处理缺失值。 ### 回答2: Scipy库中的interpolate模块提供了一种基于多项式的数据插值方法,其中griddata函数可以用于在非规则的网格点上对数据进行插值griddata函数可以根据所提供的数据点和对应的值,在指定的网格上计算出插值函数的值,从而得到一个平滑的二维或三维函数来估计数据的变化趋势。该函数有四个必需的参数,分别是数据点的坐标、对应的值、所要插值的网格点坐标和所采用的插值方法。 griddata函数提供了三种插值方法,分别是nearest、linear和cubic。其中,nearest方法是一种基于最近邻的插值方式,它使用离目标点最近的数据点来进行插值;线性插值方法是一种基于线性拟合的方法,它可以在两个数据点之间进行插值;而样条插值方法(cubic)是一种基于三次样条函数,对数据进行平滑的插值方法。 在使用griddata函数时,应该注意数据点的分布情况,尽可能避免在局部区域内出现过于稀疏或者过于密集的情况,这样会导致插值的精度不高。此外,在使用插值函数时,应该对插值函数的精度进行评估,以确定插值结果的可信度。 总之,scipy.interpolate.griddata函数用于在非规则的网格点上对数据进行插值,可以提供不同的插值方式,可以广泛地应用于不同领域中的数据分析和建模。 ### 回答3: Scipy.interpolate.griddata是一个用于插值计算的函数,它可以从散乱的数据点集合中生成连续的函数。在科学和工程领域,实验数据通常是散乱的且很难被分析和处理。通过使用插值方法将这些散点数据转化为平滑连续的函数,可以方便地对实验数据进行分析和处理。 在使用Scipy.interpolate.griddata进行插值计算时,需要提供坐标轴上的点集和对应的函数值。其中,坐标轴上的点集可以在二维或者三维空间中,对应的函数值可以是标量、矢量或者张量。Griddata函数可以使用三种不同的插值方法进行计算,分别是线性插值、最近邻插值和三次插值。通过设置不同的插值方法和插值点的数量,可以得到不同精度和计算效率的插值结果。 除了基本的插值方法外,Scipy.interpolate.griddata还提供了一些高级的功能,例如去除离群点、设置边界条件、自适应网格生成等等。这些高级功能可以帮助用户在特定的条件下,得到更加精准的插值结果。 最后,使用Scipy.interpolate.griddata进行插值计算时,需要注意选择合适的插值方法和调整插值点的数量。合理的选择可以在保证插值结果精度的同时,降低计算时间和内存占用。同时,需要注意插值结果在实验数据区间之外的取值行为,避免不合理的插值结果对后续分析和处理的影响。
for (int i = 0; i < vec.size(); i++) { if (vec[i] == tag && vec[i + 2] == "00") { int len = stoi(vec[i + 1], nullptr, 16); while (len--) { ret += vec[i+3]; ret += ' '; cout << ret; return 0; [/code] 安装eccodes运行代码出错解决 曦嘻喜喜: 同样的问题,请问解决了吗表情包 华为机试:矩阵最大值 光头强也太强了吧: 小朱加油! 华为机试:数字涂色 光头强也太强了吧: 您好,输入的描述是不是不够准确,说第二行是N个int型整数,这里是不是该描述下 以 空格分隔呢?不然输入多个数字肯定不在同一行了 Flink内核源码(八)Flink Checkpoint CSDN-Ada助手: AI 写作助手上线啦!限免 4 天,快来创作试试功能吧~https://editor.csdn.net/md/?not_checkout=1&utmsource=blog_comment_recall