python库用于插入基于规则网格数据点的随机定位的2d点



你知道一些著名的python库吗?它可以根据规则的网格日期点来插值随机定位的2d点?

请注意,用于创建插值器的数据点位于规则网格上。但评估点不在常规网格上。

上下文

让我解释一下上下文。在我的应用程序中,用于创建插值器的数据点位于规则网格上。然而,在评估时,要评估的点在随机位置上(比如np.random.rand(100, 2)(。

据我所知,最常用的二维插值库是scipy的interp2d。但是在评估时interp2d采用网格坐标XY,而不是如下文档所述的points

当然,可以做一些类似的事情

values = []
for p in np.random.rand(100, 2):
value = itp([p[0]], [p[1]])
values.append(value)

或避免环路

pts = np.random.rand(100, 2)
tmp = itp(pts[:, 0], pts[:, 1])
value = tmp.diagonal()

但这两种方法都是低效的。第一个循环的速度会很慢(尽可能像在c面中一样运行代码(,第二个循环是浪费的,因为只计算N^2点就可以得到N点的结果。

scipy.interpolate.RegularGridInterpolator确实如此。通过这种方式,可以使用网格数据点创建插值器,并且在评估时,它使用形状为(n_points,n_dim(的2dim numpy数组。

例如:

import numpy as np
from scipy.interpolate import RegularGridInterpolator
x = np.linspace(0, 1, 20)
y = np.linspace(0, 1, 20)
f = np.random.randn(20, 20)
itp = RegularGridInterpolator((x, y), f)
pts = np.random.rand(100, 2)
f_interped = itp(pts)

最新更新