比喻为scipy.interpolate.griddata?

时间:2013-08-28 19:37:19

标签: python scipy interpolation

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

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

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

对于我的非网格点云,还有替代scipy.interpolate.griddata吗?

*编辑: “没有网格外观”意味着我的输入如下:

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

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分: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的输入。