【问题标题】:Can I vectorize scipy.interpolate.interp1d我可以矢量化 scipy.interpolate.interp1d
【发布时间】:2019-12-08 03:09:15
【问题描述】:

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 循环,但这只会稍微提高速度,我更喜欢矢量化操作。

【问题讨论】:

    标签: python scipy-optimize


    【解决方案1】:

    过去几天我也一直在尝试做类似的事情。我终于设法用np.vectorize 做到了,使用function signatures。试试下面的代码 sn-p:

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

    xy 是形状 (m x n) 的数组。目标是为xi 行和yi 行生成一个插值函数数组。数组interp_fn_array 包含插值函数(形状为(1 x m)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-01
      • 1970-01-01
      相关资源
      最近更新 更多