【问题标题】:Interpolate a discrete grid of dots插入一个离散的点网格
【发布时间】:2017-01-03 19:38:35
【问题描述】:

我引用 this questionthis documentation 试图将一组点(下图中的紫色点)转换为插值网格。

如您所见,图像缺少点应该的位置。我想知道它们在哪里。

import numpy as np
from scipy import interpolate

CIRCLES_X = 25 # There should be 25 circles going across
CIRCLES_Y = 10 # There should be 10 circles going down

points = []
values = []
# Points range from 0-800 ish X, 0-300 ish Y 
for point in points:
    points.append([points.x, points.y])
    values.append(1) # Not sure what this should be

grid_x, grid_y = np.mgrid[0:CIRCLES_Y, 0:CIRCLES_X]
grid = interpolate.griddata(points, values, (grid_x, grid_y), method='linear')
print(grid)

每当我打印出网格的结果时,我的所有值都会得到 nan

我哪里错了?我的问题甚至是interpolate.grid 的正确用例吗?

【问题讨论】:

  • 您的“不完整网格”作为数据是什么样的?您的代码没有任何东西(也没有提示您遗漏的内容)。如果这是您的实际代码,这可能是答案:^)
  • @ivan_pozdeev 这就是上面的points 数组。 :) 坐标绝对不错。这段代码就是重现我的问题所需的全部内容(减去以点为单位的虚拟数据)。
  • 不过,points.append([points.x, points.y]) 没有任何意义。即使忽略它可能应该是point.x.y 的事实,您正在添加...本身的列表元素?
  • 伙计,您似乎完全不知道如何从数学角度解决您的问题,并希望scipy 能以某种方式神奇地为您解决这个问题。它不会。它只是一个工具。以一种毫无意义的方式应用它——你会得到一个结果,但却是一个毫无意义的结果。
  • 无论如何,目前的情况是没有解决方案可以实现(所以这不是一个编程问题),甚至问题陈述也缺少一些重要元素。我概述了一些可以解决问题的方法,这些方法可以从给定的信息中得出,并且在没有为您完全解决问题的情况下看不到还能做什么(由于缺少信息,我无论如何都做不到)。跨度>

标签: python numpy scipy interpolation


【解决方案1】:

首先,你的不确定点主要在边缘,所以实际上是extrapolation。其次,scipy 内置的插值方法处理定义在整个平面上的连续函数,并将其近似为多项式。虽然你的是离散的(1 或 0),但有点周期性而不是多项式,并且只定义在离散的“网格”点中。

所以你必须发明一些算法来解释/推断你的特定类型的函数。您是否能够重用现有的 - 来自 scipy 或其他地方 - 取决于您。

  • 一种可能的方法是将其替换为在各处定义的某个函数(连续或不连续),然后在缺失点中计算该近似值 - 无论是作为scipy.interpolate 非类函数的一步或作为两个单独的步骤。

    • 例如您可以使用 3-D 抛物线,点中的峰值和谷值恰好位于它们之间。或者只是点中的点和空白中的 0,并希望在网格点中得到的近似值足以给出有意义的结果(可能会出现随机上摆)。然后您可以使用scipy.interpolate.RegularGridInterpolator 进行插值和外推。

    • 或者作为调和函数 - 那么你正在寻找的是Fourier transformation

  • 另一种可能的方法是直接寻求离散解决方案,而不是尝试将连续数学分析的方法硬塞到您的案例中:设计一个(可能完全自定义)算法来尝试找出“形状”和“点网格”的“尺寸”,然后简单地填写空白。我不确定是否可以将其添加到scipy.interpolate 的线束中,作为除了内置算法之外的可选算法。

最后但并非最不重要。 您没有指定“缺失”点是值未知的点还是数据的实际部分——即不正确的数据。如果是后者,简单插值根本不适用因为它假设所有数据都是严格正确的。然后这是一个相关但不同的问题:您可以近似数据,但必须以某种方式“丢弃不规则性”(某个点之后的小实体的更高阶)。

【讨论】:

  • 虽然我真的很感谢您抽出时间来回答这个问题,但我认为您正在阅读它根本不存在的模棱两可。您提到scipy 专门处理连续函数,但我的问题linked to above 没有并取得了令人满意的结果。这就是我要使用的用例,在应该是网格状排列的点中缺少点(没有不准确的点)。
  • 我承认我的数学不是最强的,但我知道 1)我有非结构化数据 2)它是插值(因为我会在其他人之间缺少点,就像在第二柱子)。但你是对的,看起来我必须为我的用例设计一些特定的东西,这很好。上面的问题和文档让我相信可能有一个更简单的解决方案。还不如在重新发明轮子之前尝试一下那里的东西。 :)
  • c65705277:线性和三次插值将数据视为多项式函数的点。当然,实际数据可以是任何东西,只是这样处理。在链接的问题中,OP 似乎具有真正的持续功能。
  • c65705280: 你只有一个点“在其他点之间”,所有其他点都在边缘。
猜你喜欢
  • 2014-07-08
  • 1970-01-01
  • 1970-01-01
  • 2012-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-16
相关资源
最近更新 更多