每次打电话到scipy.interpolate.griddata时,都会有几件事情:
>首先,调用sp.spatial.qhull.Dealunay进行三角测量不规则的网格坐标.
>然后,对于新网格中的每个点,搜索三角测量以找到哪个三角形(实际上,在您的3D情况下,哪个单体将在哪个四面体中).
>计算每个新网格点相对于封闭单面的顶点的重心坐标.
>使用重心坐标以及包围单纯形顶点的函数值计算该网格点的内插值.
前三个步骤对于所有内插都是相同的,因此,如果您可以为每个新的网格点存储封闭单面的顶点索引和插值的权重,则可以将计算量最小化.不幸的是,直接使用可用功能是不容易的,尽管它确实有可能:
import scipy.interpolate as spint
import scipy.spatial.qhull as qhull
import itertools
def interp_weights(xyz, uvw):
tri = qhull.Delaunay(xyz)
simplex = tri.find_simplex(uvw)
vertices = np.take(tri.simplices, simplex, axis=0)
temp = np.take(tri.transform, simplex, axis=0)
delta = uvw - temp[:, d]
bary = np.einsum('njk,nk->nj', temp[:, :d, :], delta)
return vertices, np.hstack((bary, 1 - bary.sum(axis=1, keepdims=True)))
def interpolat