python - 使用RegularGridInterpolator时,如何仅在边界之外使用最近邻插值
问题描述
用于RegularGridInterpolator
获取输入数据的外壳(边界)之外的值,可以在外推值或固定值之间进行选择。如何在船体内部获得线性插值,在船体外部获得最近邻插值?
解决方案
下面的类使用两个插值器。第一个将船体外部的所有值设置为np.nan
. 第二个插值器仅对这些nan
值进行最近邻插值。
class RegularGridInterpolatorNNextrapol:
def __init__( self, points, values, method='linear' ):
self.interp = RegularGridInterpolator(points, values, method=method,
bounds_error=False, fill_value=np.nan)
self.nearest = RegularGridInterpolator(points, values, method='nearest',
bounds_error=False, fill_value=None)
def __call__( self, xi ):
vals = self.interp( xi )
idxs = np.isnan( vals )
vals[idxs] = self.nearest( xi[idxs] )
return vals
这是一个导致下图的示例:
x = np.linspace( -0.5, 0.5, 5 )
y = np.linspace( -0.5, 0.5, 5 )
X1, Y1 = np.meshgrid(x, y)
z = np.hypot(X1, Y1)
interp = RegularGridInterpolatorNNextrapol((x,y), z)
X = np.linspace(min(x)-0.2, max(x)+0.2,40)
Y = np.linspace(min(y)-0.2, max(y)+0.2,40)
X, Y = np.meshgrid(X, Y) # 2D grid for interpolation
pts = np.column_stack((X.flatten(),Y.flatten()))
Z = interp( pts )
plt.pcolormesh(X, Y, Z.reshape(X.shape), shading='auto')
plt.plot(X1, Y1, "ok" )
plt.legend()
plt.colorbar()
plt.axis("equal")
plt.show()
推荐阅读
- python - 在python中计算分类变量和连续变量的条件概率?P(分类|连续)
- java - Firebase Crashlytics 没有显示我的错误
- html - HTML textarea 背景在 chrome 中跳跃
- c# - 如何在 C# 中使用 ews 获取邮箱的属性(类似于 Get-Mailbox run cmdlet 但使用 ews 的输出)
- android - 当a11y更改为大字体时android视图宽度不会变大
- php - Vue.js + PHP 项目 + 翻译
- tensorflow - TensorFlow 的 Keras 应用程序和预处理版本
- azure - Azure:错误 503:为 Azure 中的应用服务切换应用服务计划后服务不可用
- vba - 在excel中创建宏
- javascript - JavaScript 查找最后选中的复选框的索引