类比于scipy.interpolate.griddata?

7

我想要对给定的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]

3
名称有些误导性:griddata 接受非结构化数据,比如你的数据,并进行插值。我猜这个名称是因为它通常用于将一组点重新采样成一个规则的网格。阅读文档,其中的实例很清楚地说明了如何使用它。如果你要对多组点进行插值,你应该考虑使用文档中提到的插值器对象,以免重复构建插值器。 - Jaime
我还有一个问题(或者我应该开一个新的主题来问?)这个插值是否可以“切割”某个z值?也就是说,我想输入一个z值,并希望得到描述该z值处“外壳”的某种函数 - 或者只是返回该外壳内部的区域。 - Munchkin
你所说的“casing”是什么意思?我不认为我理解你的意思...无论如何,正确的做法是提出一个新的问题:这样可以使得其他人更容易找到答案,并且能够吸引更多人的关注。 - Jaime
好的,我完成了:https://dev59.com/JHbZa4cB1Zd3GeqPDTqU - Munchkin
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)

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]

这将创建一个范围为-10到10的x方向和0到2的y方向的51x20网格。
现在,您需要为scipy.interpolate.griddata进行输入更正。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接