我有一些数据,以(x, y, z, V)
的形式呈现,其中x、y、z是距离,V是湿度。我在StackOverflow上读到了很多关于用Python进行插值的文章,比如这篇和这篇有价值的帖子,但它们都是关于规则格点的,即每个的值与每个和每个的点相等地贡献。另一方面,我的点来自三维有限元网格(如下图),其中网格不规则。
这两篇提到的文章1和2,将x、y、z中的每一个定义为单独的numpy数组,然后使用像cartcoord = zip(x, y)
这样的东西,然后使用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] ,
[28.761, 21.565, -31.586, 0.211] , [26.263, 23.686, -32.766, 0.215]]
我想要得到点 (25, 20, -30)
的插值数值 V
,请问如何获取?
method='linear'
的griddata
函数将使用LinearNDInterpolator
(对于1D或2D网格,只有'cubic'可用)。因此,您做了两次相同的操作。请注意,您应该在最后一行将xi
更换为request
。 - riddleculous