7

我想插入一个给定的 3D 点云:

我查看了 scipy.interpolate.griddata ,结果正是我所需要的,但据我所知,我需要输入“griddata”,这意味着类似x = [[0,0,0],[1,1,1],[2,2,2]].

但是我给定的 3D 点云没有这种网格外观 - x,y 值的行为不像网格 - 无论如何每个 x,y 值只有一个 z 值。*

那么对于我的 not-in-a-grid-point-cloud 是否有 scipy.interpolate.griddata 的替代方案?

*编辑:“无网格外观”表示我的输入如下所示:

x = [0,4,17]
y = [-7,25,116]
z = [50,112,47]
4

2 回答 2

6

这是我用于此类东西的功能:

from numpy import linspace, meshgrid

def grid(x, y, z, resX=100, resY=100):
    "Convert 3 column data to matplotlib grid"
    xi = linspace(min(x), max(x), resX)
    yi = linspace(min(y), max(y), resY)
    Z = griddata(x, y, z, xi, yi)
    X, Y = meshgrid(xi, yi)
    return X, Y, Z

然后像这样使用它:

  X, Y, Z = grid(x, y, z)
于 2013-08-28T23:08:02.950 回答
0

Scipy 有文档,其中包含如何使用 scipy.interpolate.griddata 的具体示例,它们准确地解释了您的要求。看这里: http ://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.griddata.html

简而言之,您这样做是为了获取“网格数据”:

grid_x, grid_y = np.mgrid[0:1:100j, 0:1:200j]

这将创建一个 100x200 的网格,在 x 和 y 方向上范围从 0 到 1。

grid_x, grid_y = np.mgrid[-10:10:51j, 0:2:20j]

这将创建一个 51x20 的网格,在 x 方向上的范围为 -10 到 10,在 y 方向上的范围为 0 到 2。

现在您必须更正 scipy.interpolate.griddata 的输入。

于 2015-02-24T10:07:25.413 回答