【发布时间】:2021-05-25 10:21:41
【问题描述】:
我正在努力提高我正在使用 gridfit 插值的大型数据集的插值速度。我已经在 stackoverflow 上发布了question,但没有得到回复
所以,我正在考虑尝试一些替代方法。我的想法是,如果我有一个庞大的数据集,如下面的 Python 代码 sn-p 所示
arr_len = 932826
xi = np.random.uniform(low=0, high=4496, size=arr_len)
yi = np.random.uniform(low=-74, high=492, size=arr_len)
zi = np.random.uniform(low=-30, high=97, size=arr_len)
我必须插值并获取定义点的值,例如 (x, y)。使用 interp2d 从分散的数据 xi、yi 和 zi 中找到 4 个相邻点以便执行双线性插值的最快方法是什么(见下图)。我不知道这是否会给我比使用 gridata 更快的结果,但我会很高兴尝试一下
【问题讨论】:
-
我认为您可以将那些
xi、yi、zi传递给interp2d? “x、y 和 z 是用于逼近某个函数 f 的值的数组:z = f(x, y)。此类返回一个函数,其调用方法使用样条插值来查找新点的值。” -
@AKX:我试过了,但是 interp2d 无法处理这么大的数据集,所以想考虑替代方案
-
如何定义“4 个相邻点”?具体来说,在您的图片中,如果 x1 是小于 x 的所有 xi 的最大值,并且 y1 是小于 y 的所有 yi 的最大值,则 x1 和 y1 不一定属于数据集中的同一点,对?所以你可能不知道 Q11 的 z 值。还是我错过了什么?
-
也许您想要做的基本上是最近邻回归?如果是这样,您可以使用 scikit-learn:scikit-learn.org/stable/modules/neighbors.html#neighbors
-
@Arne :是的,你是对的,如果我们按照你的定义进行搜索,那么我们最终可能会得到离散点,这可能不会给我们 Q11。我的想法是把这个区域分成4个象限,然后搜索一个象限中的所有点。然后根据与 x,y 的距离排序最近的点,得到一个唯一的数字。但后来感觉计算量也很大!
标签: python numpy scipy interpolation bilinear-interpolation