替代蟒蛇的GridData(Alternatives to python griddata)

2019-09-30 08:22发布

我使用的GridData重新取样网格上的一个numpy的2维阵列。

z.shape = (1000, 1000)
x, y = np.arange(-5, 5, 0.01), np.arange(-5, 5, 0.01)
newx, newy = np.arange(-2, 2, 0.1), np.arange(-2, 2, 0.1)

griddata((x, y), z, (newx[None, :], newy[:, None]))

代码应该:

  • 重新采样Z(其表示的图像)到一个新的更细的网格
  • 新的网格不一定涵盖所有的原单。

然而的GridData无法管理常规输入电网。 有谁知道一个简单的方法吗?

Answer 1:

使用任何对文档中列出的网格适合于数据的方法: https://docs.scipy.org/doc/scipy/reference/interpolate.html#multivariate-interpolation

那是:

https://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.RegularGridInterpolator.html

或https://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.RectBivariateSpline.html

或https://docs.scipy.org/doc/scipy/reference/generated/scipy.ndimage.interpolation.map_coordinates.html

另请注意,您所使用griddata不正确。 代码对应于从由你的1000(X,Y)限定的线坐标,其中每个点具有与其相关联的值1000内插。 然而,内插,以从2D一维线被严重限定,并且从试图三角测量的一组是沿一条线的点的失败的结果。

你应该做

import numpy as np
from scipy.interpolate import griddata

z = np.random.rand(100, 100)
z.shape = (100, 100)
x, y = np.arange(-5, 5, 0.1), np.arange(-5, 5, 0.1)

xx, yy = np.meshgrid(x, y, indexing='ij')

newx, newy = np.arange(-2, 2, 0.1), np.arange(-2, 2, 0.1)

griddata((xx.ravel(), yy.ravel()), z.ravel(), (newx[None, :], newy[:, None]))

这将正常工作---然而,在1000×1000的2D = 1000000点仅仅是基于三角测量的非结构化插了太多的数据(需要大量内存的三角+它的速度慢),所以你应该使用栅格数据的算法。



文章来源: Alternatives to python griddata