scipy 基于规则网格数据点二维随机点插值的python库

g6baxovj  于 2022-11-10  发布在  Python
关注(0)|答案(1)|浏览(249)

您知道一些著名python库吗?这些库用于根据规则的网格日期点插入随机定位的二维点。
请注意,创建插值器的数据点位于规则网格上。但评估点不在规则网格上。

上下文

让我来解释一下上下文。在我的应用程序中,创建插值器的数据点位于规则网格上。然而,在求值时,要求值的点位于随机位置(比如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)

或避免for循环

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

但是这两种方法都是低效的。第一种方法会因为for循环而变慢(尽可能像在c端那样运行代码),第二种方法是浪费的,因为计算N^2个点而只得到N个点的结果。

3bygqnnd

3bygqnnd1#

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)

相关问题