scipy.interpolate.griddata:剪切z值并获取其中的区域

时间:2013-08-28 22:11:17

标签: python numpy scipy interpolation

关于此:analogy to scipy.interpolate.griddata? 我还有一个问题: 我的输出如下所示:enter image description here

这是一个有噪音的金字塔(没有地面)。 在scipy.interpolate.griddata中是否有可能输入/选择某个z值,以便的所有点都相等,这个z值会被删除?在我的例子中:例如我输入一个高z值 - >只有具有某个红色值(= z值)的点才能保持活着并向我显示一个未填充的,噪音的红色三角形。目标是将这个区域放在这个噪音三角形内。

编辑: tldr:正如我刚才所了解的那样,这是一个 isoline 我正在寻找的东西以及它里面的区域。

EDIT2: 所以我发现从这个例子http://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.griddata.html“grid_z1.T”返回一个包含所有z值的数组。在循环中,我可以消除所有不等于某个z值的值 - >我得到了我的等值线。问题是,它不是重新连接iso 线,而是一个具有一些iso值的网格。这很好,但也许有更好的解决方案? 还有其他一些方法,然后grid_z.T可以满足我的需求吗?

2 个答案:

答案 0 :(得分:1)

在将数据转换为网格形式之前,最好先完成此操作:

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

>> data = np.column_stack([x, y, z])
array([[  0,  -7,  50],
       [  4,  25, 112], # <<----------------  Keep this
       [ 17, 116,  47]])
>>> data = data[data[:,2] == 112]  # points with z==112
array([[  4,  25, 112]])

然后你可以使用griddata转换数据以进行绘图,或者例如给定here的函数:

X, Y, Z = grid(data[0], data[1], data[2])

答案 1 :(得分:0)

在这种特殊情况下,我可以轻松解决它: 我没有消除所有不等于某个z值的值,而是消除了高于某个z值的所有值:

if grid_z1.T[i][j] > z0 or math.isnan(grid_z1.T[i][j]):
    grid_z1.T[i][j] = np.nan

因为我自己定义了gridsize,所以我很容易通过将gridsize与点数相乘来计算面积。

OT:很抱歉这么晚回复 - 我已经住院一周了。