scipy.interpolate.RectSphereBivariateSpline

class scipy.interpolate.RectSphereBivariateSpline(u, v, r, s=0.0, pole_continuity=False, pole_values=None, pole_exact=False, pole_flat=False)[源代码]

球面上矩形网格上的二元样条逼近。

可用于平滑数据。

0.11.0 新版功能.

参数
uarray_like

严格升序的一维纬度坐标数组。坐标必须以弧度表示,并且位于开放区间内 (0, pi)

varray_like

严格升序的一维经度坐标数组。坐标必须以弧度表示。第一个元素 (v[0] )必须在间隔内 [-pi, pi) 。最后一个元素 (v[-1] )必须满足 v[-1] <= v[0] + 2*pi

rarray_like

具有形状的二维数据数组 (u.size, v.size)

s浮动,可选

为估计条件定义的正平滑因子 (s=0 用于插值)。

pole_continuitybool or(bool,bool),可选

Order of continuity at the poles u=0 (pole_continuity[0]) and u=pi (pole_continuity[1]). The order of continuity at the pole will be 1 or 0 when this is True or False, respectively. Defaults to False.

pole_valuesFLOAT OR(FLOAT,FLOAT),可选

两极的数据值 u=0u=pi 。整个参数或每个单独的元素都可以为None。默认为无。

pole_exactbool or(bool,bool),可选

极点数据值的准确性 u=0u=pi 。如果为True,则该值被视为正确的函数值,并且将精确拟合。如果为False,则该值将被视为数据值,就像其他数据值一样。默认为False。

pole_flatbool or(bool,bool),可选

对于两极来说, u=0u=pi 中,指定近似是否具有逐渐消失的导数。默认为False。

参见

BivariateSpline

二元样条的基类。

UnivariateSpline

一种光滑的单变量样条,用于拟合给定的数据点集合。

SmoothBivariateSpline

一种通过给定点的光顺二元样条

LSQBivariateSpline

基于加权最小二乘拟合的二元样条

SmoothSphereBivariateSpline

球坐标下的光顺二元样条

LSQSphereBivariateSpline

球坐标下加权最小二乘拟合的二元样条

RectBivariateSpline

矩形网格上的二元样条。

bisplrep

求曲面的二元B样条表示的函数

bisplev

二元B样条及其导数的一个求值函数

注意事项

目前,只有平滑样条近似 (iopt[0] = 0iopt[0] = 1 在FITPACK例程中)是受支持的。精确的最小二乘样条逼近尚未实现。

在实际执行插值时,请求的 v 值必须位于与原始的2pi间隔相同的长度范围内 v 值选自。

有关更多信息,请参阅 FITPACK 关于此功能的站点。

示例

假设我们在粗略网格上有全局数据

>>> lats = np.linspace(10, 170, 9) * np.pi / 180.
>>> lons = np.linspace(0, 350, 18) * np.pi / 180.
>>> data = np.dot(np.atleast_2d(90. - np.linspace(-80., 80., 18)).T,
...               np.atleast_2d(180. - np.abs(np.linspace(0., 350., 9)))).T

我们想要将其插值到全球一度网格中

>>> new_lats = np.linspace(1, 180, 180) * np.pi / 180
>>> new_lons = np.linspace(1, 360, 360) * np.pi / 180
>>> new_lats, new_lons = np.meshgrid(new_lats, new_lons)

我们需要设置插值器对象

>>> from scipy.interpolate import RectSphereBivariateSpline
>>> lut = RectSphereBivariateSpline(lats, lons, data)

最后,我们对数据进行插值。这个 RectSphereBivariateSpline 对象只接受一维数组作为输入,因此我们需要进行一些整形。

>>> data_interp = lut.ev(new_lats.ravel(),
...                      new_lons.ravel()).reshape((360, 180)).T

查看原始数据和插值数据,可以看到插值器很好地再现了原始数据:

>>> import matplotlib.pyplot as plt
>>> fig = plt.figure()
>>> ax1 = fig.add_subplot(211)
>>> ax1.imshow(data, interpolation='nearest')
>>> ax2 = fig.add_subplot(212)
>>> ax2.imshow(data_interp, interpolation='nearest')
>>> plt.show()
../../_images/scipy-interpolate-RectSphereBivariateSpline-1_00_00.png

选择最优值 s 可能是一项微妙的任务。的推荐值 s 取决于数据值的准确性。如果用户对数据的统计错误有所了解,她还可以找到适当的估计值 s 。假设如果她指定的权利 s ,插值器将使用样条曲线 f(u,v) 准确地再现了数据背后的功能,她可以评估 sum((r(i,j)-s(u(i),v(j)))**2) 为这个找到一个好的估计值 s 。例如,如果她知道她身上的统计错误 r(i,j) -值不大于0.1,她可能会期待一个好的 s 应具有不大于以下值的值 u.size * v.size * (0.1)**2

如果对中的统计错误一无所知 r(i,j), s must be determined by trial and error. The best is then to start with a very large value of s (to determine the least-squares polynomial and the corresponding upper bound fp0 for s) and then to progressively decrease the value of s (say by a factor 10 in the beginning, i.e. s = fp0 / 10, fp0 / 100, ... 并且当近似显示更多细节时)以获得更紧密的拟合。

不同值的插值结果 s 让我们深入了解一下这一过程:

>>> fig2 = plt.figure()
>>> s = [3e9, 2e9, 1e9, 1e8]
>>> for idx, sval in enumerate(s, 1):
...     lut = RectSphereBivariateSpline(lats, lons, data, s=sval)
...     data_interp = lut.ev(new_lats.ravel(),
...                          new_lons.ravel()).reshape((360, 180)).T
...     ax = fig2.add_subplot(2, 2, idx)
...     ax.imshow(data_interp, interpolation='nearest')
...     ax.set_title(f"s = {sval:g}")
>>> plt.show()
../../_images/scipy-interpolate-RectSphereBivariateSpline-1_01_00.png

方法:

__call__ \(θ,φ[, dtheta, dphi, grid] )

计算给定位置的样条曲线或其导数。

ev \(θ,φ[, dtheta, dphi] )

对点处的样条曲线求值

get_coeffs \()

返回样条系数。

get_knots \()

返回一个元组(tx,ty),其中tx,ty分别包含样条曲线相对于x,y变量的节点位置。

get_residual \()

返回样条近似的平方残差的加权和:SUM((w [i] [(z[i]-s(x[i],y[i])))] *2,轴=0)