Python - 构造具有numpy的meshgrid(不规则网格)

时间:2015-11-16 09:10:13

标签: python numpy datagrid interpolation

我的目标是插入一些数据。要做到这一点,我必须创建一个meshgrid。 为了完成这一步,我得到了一个带有我的2D坐标的数组" coord" (第一列:元素编号,第二列:X和第三列:Y)。

我使用np.meshgrid做一个meshgrid,如下所示。 但我的结果似乎很奇怪,所以我想知道我是否已经完成了 一个错误......我必须在meshgrid步骤之前重新组织我的数据吗?

import numpy as np
coord = np.array([[  1.        ,  -1.38888667,  -1.94444333],
       [  2.        ,  -1.94444333,  -1.38888667],
       [  3.        ,   0.27777667,  -1.94444333],
       [  4.        ,  -0.27777667,  -1.38888667],
       [  5.        ,   1.94444333,  -1.94444333],
       [  6.        ,   1.38888667,  -1.38888667],
       [  7.        ,  -1.38888667,  -0.27777667],
       [  8.        ,  -1.94444333,   0.27777667],
       [  9.        ,   0.27777667,  -0.27777667],
       [ 10.        ,  -0.27777667,   0.27777667],
       [ 11.        ,   1.94444333,  -0.27777667],
       [ 12.        ,   1.38888667,   0.27777667],
       [ 13.        ,  -1.38888667,   1.38888667],
       [ 14.        ,  -1.94444333,   1.94444333],
       [ 15.        ,   0.27777667,   1.38888667],
       [ 16.        ,  -0.27777667,   1.94444333],
       [ 17.        ,   1.94444333,   1.38888667],
       [ 18.        ,   1.38888667,   1.94444333]])

[Y,X]=np.meshgrid(coord[:,2],coord[:,1])

如果我画Y,我得到了:

plt.imshow(Y);plt.colorbar();plt.show()

enter image description here

----编辑后-----

我想知道(例如)netgrid的坐标是否必须严格增加?如果有一个更好的方法,我有一些没有组织的坐标?

对于插值,我想使用:

def interpolate(values, tri,uv,d=2):
    simplex = tri.find_simplex(uv)
    vertices = np.take(tri.simplices, simplex, axis=0)
    temp = np.take(tri.transform, simplex, axis=0)
    delta = uv- temp[:, d]
    bary = np.einsum('njk,nk->nj', temp[:, :d, :], delta)  
    return np.einsum('nj,nj->n', np.take(values, vertices),  np.hstack((bary, 1.0 - bary.sum(axis=1, keepdims=True))))

Speedup scipy griddata for multiple interpolations between two irregular grids之前的堆栈中使用,允许限制计算时间

0 个答案:

没有答案