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循环,但这只会使速度略有提高,我非常喜欢将操作向量化。
发布于 2022-01-31 16:10:40
在过去的几天里,我也一直试图做一些类似的事情。最后,我使用np.vectorize (使用功能签名 )成功地做到了这一点。尝试使用下面的代码片段:
fn_vectorized = np.vectorize(interpolate.interp1d,
signature='(n),(n)->()')
interp_fn_array = fn_vectorized(x[np.newaxis, :, :], y)x和y是形状数组(m )。目的是为x的第一行和y的第一行生成一个插值函数数组。数组interp_fn_array包含插值函数(形状为(1×m) )。
https://stackoverflow.com/questions/59232105
复制相似问题