是否有库模块或其他直接的方法在python中实现多元样条插值?
具体来说,我在一个规则间隔的三维网格上有一组标量数据,我需要在分散在整个域中的少量点进行插值.对于二维,我一直在使用scipy.interpolate.RectBivariateSpline,我实际上是在寻找三维数据的扩展.
我发现的N维插值例程还不够好:我更喜欢使用LinearNDInterpolator上的样条线来获得平滑度,而且我有太多的数据点(通常超过一百万),例如,径向基函数可以工作.
如果有人知道可以执行此操作的python库,或者我可以调用或移植的另一种语言,我真的很感激.
我有一些体积成像数据,包括在x,y,z的规则网格上采样的值,但具有非立方体素形状(z中相邻点之间的空间大于x,y).我最终希望能够在通过卷的任意2D平面上插值,如下所示:

我知道scipy.ndimage.map_coordinates,但在我的情况下使用它不那么简单,因为它隐含地假设输入数组中元素的间距在维度上是相等的.我可以首先根据最小的体素尺寸对我的输入数组进行重新采样(这样我的所有体素都可以是立方体),然后map_coordinates用来在我的平面上进行插值,但是插入我的数据两次似乎不是一个好主意.
我也知道,scipy有不规则隔开的ND数据(不同的内插LinearNDInterpolator, NearestNDInterpolator等等),但这些都是非常缓慢和内存密集型,我的目的.在我知道值在每个维度内有规律间隔的情况下,插入数据的最佳方法是什么?
我有一些数据,(x, y, z, V)其中x,y,z是距离,V是水分。我在StackOverflow上阅读了很多有关通过python进行插值的知识,例如这篇文章和这篇有价值的文章,但是它们都是关于的规则网格x, y, z。即的每个价值在的x每个点y和每个点上均等地贡献z。另一方面,我的观点来自3D有限元网格(如下所示),其中网格不是规则的。
上面提到的两个帖子1和2将x,y,z中的每一个定义为一个单独的numpy数组,然后使用了类似于cartcoord = zip(x, y)then scipy.interpolate.LinearNDInterpolator(cartcoord, z)(在3D示例中)的内容。我不能做同样的事情,因为我的3D网格不是规则的,因此不是每个点都对其他点有贡献,因此,如果我重复这些方法,则会发现许多空值,并且会出现很多错误。
这是10个样本点,形式为 [x, y, z, V]
data = [[27.827, 18.530, -30.417, 0.205] , [24.002, 17.759, -24.782, 0.197] ,
[22.145, 13.687, -33.282, 0.204] , [17.627, 18.224, -25.197, 0.197] ,
[29.018, 18.841, -38.761, 0.212] , [24.834, 20.538, -33.012, 0.208] ,
[26.232, 22.327, -27.735, 0.204] , [23.017, 23.037, -29.230, 0.205] , …Run Code Online (Sandbox Code Playgroud)