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)
x
和y
是形状的数组 (m x n(。目标是为x
的第i行和第y
行生成插值函数数组。数组interp_fn_array
包含插值函数(形状为 (1 x m(。