从scipy Regular Grid Interp返回2D数组

2024-06-17 12:12:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用Scipy插值6维数据,并希望有一种方法从我的插值器对象返回一个二维数组,而不是一维数组。目前,我只能通过使用for循环并多次调用interpolator对象来实现这一点—我希望有更好的方法。在

例如,在3D中:

#Random data
points=(np.arange(10), np.arange(5), np.arange(5))
values=np.random.rand(10, 5, 5)

interp_object=scipy.interpolate.RegularGridInterpolator(points, values)

我希望能够:

^{pr2}$

但这导致

ValueError: shape mismatch: objects cannot be broadcast to a single shape

最后我要做的是:

out_array=np.empty((10, 5))
for i, y in enumerate(y_points):
    out_array[:, i]=interp_object((x_points, y, z_points))

这个循环是我代码中的主要瓶颈,如果可能的话我想避免它!我想用RegularGridInterpolator或其他插值方法来做吗?在


Tags: 对象方法forobjectnp数组outarray
1条回答
网友
1楼 · 发布于 2024-06-17 12:12:34

本部分代码:

#Pick some points along each axis
x_points=np.arange(10)
y_points=[1.2, 3.1, 1.4, 4.8, 0.1]
z_points=3.5

xi=(x_points, y_points, z_points)

out_array=interp_object(xi)

将不起作用,因为您必须以数组形式提供所需的所有点。所以我们需要生成一个包含所有组合的矩阵。为此,我们可以使用meshgrid。我们还需要对数组维进行一些操作,以使一切正常工作,所以它看起来可能有点混乱。下面是一个例子:

^{pr2}$

另外请注意,我已经改变了你给出的分数。RegularGridInterpolator只能用于插值,如果在创建插值函数(在本例中称为interp_object)时超出给定范围使用,则不会起作用。在

相关问题 更多 >