我可以矢量化scipy.interpolate.interp1d吗?


interp1d

对我拥有的单个数据集非常有效,但是我有超过500万个数据集需要插值。

我需要插值是立方的,并且每个子集应该有一个插值。

现在我可以使用 for 循环来做到这一点,但是,对于要插值的 500 万个集合,这需要相当长的时间(15 分钟(:

interpolants = []
for i in range(5000000):             
interpolants.append(interp1d(xArray[i],interpData[i],kind='cubic'))

我想做的可能看起来像这样:

interpolants = interp1d(xArray, interpData, kind='cubic')

但是,此操作失败,并显示错误:

ValueError: x and y arrays must be equal in length along interpolation axis.

我的 x 数组 (xArray( 和 y 数组 (interpData( 都有相同的维度...

我可以并行化 for 循环,但这只会给我带来速度的小幅提高,我非常希望矢量化操作。

在过去的几天里,我也一直在尝试做类似的事情。我终于设法用np.vectorize,使用函数签名来做到这一点。尝试使用以下代码片段:

fn_vectorized = np.vectorize(interpolate.interp1d,
signature='(n),(n)->()')
interp_fn_array = fn_vectorized(x[np.newaxis, :, :], y)

xy是形状的数组 (m x n(。目标是为x的第i行和第y行生成插值函数数组。数组interp_fn_array包含插值函数(形状为 (1 x m(。

最新更新