在python中,是否有库模块或其他简单的方法来实现多元样条插值?
具体来说,我在一个规则间隔的三维网格上有一组标量数据,我需要在分散在整个域中的少量点处进行插值。对于二维,我一直在使用scipy.interpolate.RectBivariateSpline,实际上我在寻找三维数据的扩展。
我发现的N维插值程序还不够好:我更喜欢样条曲线而不是LinearNDInterpolator的平滑度,而且我有太多的数据点(通常超过一百万个)来工作,例如径向基函数。
如果有人知道一个python库可以做到这一点,或者我可以调用或移植另一种语言的python库,我将非常感激。
dim>;2中的平滑样条插值很难实现,因此没有多少免费可用的库能够做到这一点(事实上,我不知道任何库)。
您可以尝试反向距离加权插值,请参见:Inverse Distance Weighted (IDW) Interpolation with Python。 这将产生相当平滑的结果,并比RBF更适合于更大的数据集。
如果我正确理解了你的问题,你输入的“观察”数据会定期被网格化吗?
如果是的话,^{} 正是你想要的。
在第一次扫描时有点难以理解,但实际上,你只需要给它一个坐标序列,你想在像素/体素/n维索引坐标中插值网格的值。
作为二维示例:
要在n维中执行此操作,只需传入适当大小的数组:
就缩放和内存使用而言,
map_coordinates
将创建数组的筛选副本,如果您使用的是order>;1(即不是线性插值)。如果只想在极少数点处插值,则开销相当大。但是,它不会随着要插值的点数而增加。只要有足够的RAM用于输入数据数组的一个临时副本,就可以了。如果无法将数据副本存储在内存中,可以a)指定
prefilter=False
和order=1
并使用线性插值,或者b)使用ndimage.spline_filter
将原始数据替换为筛选版本,然后使用prefilter=False
调用map_坐标。即使您有足够的ram,如果您需要多次调用map_坐标(例如交互使用等),保持过滤后的数据集也会大大加快速度。
相关问题 更多 >
编程相关推荐