Matlab的spline等效于Python,三个输入。

时间:2017-06-21 15:45:11

标签: python matlab numpy interpolation spline

我正在将一个matlab脚本转换为python,我有一个障碍。 为了在信号上使用三次样条插值。该脚本使用带有三个输入的命令样条线。 f_o,c_signal和freq。所以它看起来如下。

cav_sig_freq = spline(f_o, c_signal, freq)
f_o = 1x264, c_signal = 1x264 and freq = 1x264

从matlab中的文档中可以看出,“s = spline(x,y,xq)返回对应于xq中查询点的插值s的向量.s的值由x的三次样条插值确定Y“。

在python中,我很难找到正确的python等价物。我在numpy和Scipy文档中找到了不同的插值函数,让我们使用Matlab中的第三个输入。

感谢您花时间阅读本文。如果有任何关于如何使其更清晰的建议,我将很乐意这样做。

2 个答案:

答案 0 :(得分:3)

基本上你首先需要生成类似插值函数的东西,然后给它你的观点。使用这样的变量名:

from scipy import interpolate
tck = interpolate.splrep(f_o, c_signal, s=0)

然后将此tck应用于您的观点:

c_interp = interpolate.splev(freq, tck, der=0)

有关详情,请阅读post

答案 1 :(得分:0)

您是否在scipy.interpolate中尝试过InterpolatedUnivariateSpline?如果我正确理解了MatLab部分,那么我认为这将有效。

import numpy as np
from scipy.interpolate import InterpolatedUnivariateSpline as ius

a = [1,2,3,4,5,6]
b = [r * 2 for r in a]
c = ius(a, b, k=1)

# what values do you want to query?
targets = [3.4, 2.789]

interpolated_values = c(targets)

看起来这可能会给你的代码增加一个步骤,而不是MatLab提供的步骤,但我认为这就是你想要的。