内插4D数据

时间:2014-06-15 21:50:00

标签: python coordinates interpolation 4d splines

我有一组GPS站,其坐标我知道(x,y,z),并且对于每个站,我也有错误(e)。这些站当然是不均匀的,否则就太容易了。问题是,为了计算我的车站错误e,我只使用了所述车站,但我也想考虑其他车站。

我的问题是:给定一组不均匀间隔(x,y,z,e)点,我如何根据点之间的空间距离插入e? 插值不需要精确,因为我在已经拥有它的点上重新计算e。 此外,我正在寻找比反距离或类似东西清洁的东西。例如,样条曲线会很好。

从我读过的内容来看,scipy.interpolate包的splev函数似乎可以解决问题,但是我无法理解它是如何工作的,或者我应该把它作为参数。

我有人可以解释这是如何工作的,或者指向另一种方法,它会很棒。

1 个答案:

答案 0 :(得分:1)

如果我正确理解了你的问题,你在空间中有一个点x,y,z,并且你想通过从已知的站点插值来计算误差。您还建议错误读取的有效性取决于距离已知错误的点的距离。

因此,对于点x,y,z,您可以计算其与每个已知接收站的距离。然后你有一些从这些距离计算的权重函数。最后,你通过权重函数得到加权平均值(或者可能做一些其他的技巧来消除异常值)。

这个怎么样:

# known station coordinates (number of rows matching number of stations)
coords = array([
    (x1, y1, z1),
    (x2, y2, z2),
    ... ])
# respective error values (number of items matching number of stations)
err_values = array([
    e1,
    e2),
    ... ])

# p is a three-element array representing our coordinates
# distances will contain the spatial euclidian distances to the stations 
distances = numpy.linalg.norm(coords - p[None,:], axis=1)

# get the weights somehow
weights = my_weight_function(distances)

# return the weighted average
return numpy.average(err_values, weights=weights)

还有一个技巧可能有用,特别是在这种情况下。最后一个陈述可以替换为:

return numpy.sum(err_values * weights) / (eps + numpy.sum(weights))

基本上是一个加权和,但是在分母中添加了一小部分eps。这里的要点是,当我们谈论一个错误时,它应该离已知点非常远。否则,我们通常会将已知错误的平均值作为地球另一侧的错误,这是不合理的。唯一合理的假设是误差很远。它不是,但我们不知道更好,因此零是最好的猜测。


如果我以错误的方式理解你的问题,请告诉我。 (如果您将插值问题视为提高地球表面精度的一种方法,那么实际上地球表面存在2d问题,而不是真正的3D问题。)