【问题标题】:interpolating 4D data插值 4D 数据
【发布时间】:2014-06-17 17:10:10
【问题描述】:

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

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

根据我的阅读,scipy.interpolate 包的 splev 函数似乎可以解决问题,但我无法理解它是如何工作的,或者我应该将它作为参数提供什么。

我有人可以解释这应该如何工作,或者给我指出另一种方法,这会很棒。

【问题讨论】:

  • 为什么你认为“反距离或类似的东西”不是一个“干净”的解决方案?另外,正如 DrV 在下面问的那样,你真的有 3D 点,还是你可以摆脱 2.5D(地球表面加高程)?
  • 我需要真正消除我的错误,而不是得到一个过于“尖刻”的解决方案。它们确实是相关的,除此之外还有一些噪音。

标签: python coordinates interpolation 4d splines


【解决方案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 问题。)

【讨论】:

  • 这不就是IDW(逆距离加权)算法吗?
  • 嗯,它是 *DW 算法,你选择权重:) 我怀疑试图找到更智能的东西需要更多关于错误源的知识。如果根本问题不产生样条线,那么仅使用样条线没有多大帮助。距离加权算法至少相当稳定。
  • 谢谢,但那基本上是IDW,我不能使用它。我的错误之间有很强的相关性,我怀疑潜在的问题更可能产生样条状的形状,而不是像 IDW 通常产生的尖峰。此外,就像我说的,我的站点间隔不均匀,有几近空旷的区域和集群,这将吸引对它们的修正。我也许可以摆脱地球表面 + 海拔,但这需要对我的数据进行巨大的转换(这非常重要),距离地球中心以米为单位。
  • 这里的想法是你不使用 IDW(因为它真的是一个尖尖的野兽),但你使用 1/x 以外的东西作为权重函数。您的权重函数应将站点之间的相关性反映为与站点距离的函数。我会尝试,例如,不同宽度的高斯,看看它是否有用。例如,3D 样条的问题在于您的数据是本地 2D 数据(“地球是平的”),并且将 3D 内容拟合到该数据很容易在第三维中产生非常奇怪的结果。
  • 我的站点分散在整个新西兰,所以我设法通过从新西兰测量研究所找到正确的投影来绕过这个问题,我最终在 2D 中工作。但作为一个理论问题,我想知道如何用 Python 做 3D 样条线。
猜你喜欢
  • 2017-12-25
  • 2016-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-17
  • 2012-12-16
  • 2021-09-25
  • 2013-07-24
相关资源
最近更新 更多