python 中的分段线性插值函数
piecewise linear interpolation function in python
我对编程还很陌生,我想尝试编写一个分段线性插值函数。 (也许这是用 numpy.interp 或 scipy.interpolate.interp1d 完成的)
假设我得到如下数据:x=[1, 2.5, 3.4, 5.8, 6] y=[2, 4, 5.8, 4.3, 4]
我想设计一个分段插值函数,使用 Python 给出 1 到 2.5、2.5 到 3.4 之间的所有线性多项式片段的系数等等。
当然,matlab 有 interp1 函数可以执行此操作,但我使用 python,我想做与 matlab 完全相同的工作,但 python 只给出值而不是线性多项式系数! (在 matlab 中我们可以用 pp.coefs 得到这个)。
但是如何在 python numpy.interp 中得到 pp.coefs 呢?
如果您正在进行线性插值,您可以只使用从点 (x0, y0)
到 (x1, y1)
的线对它们进行插值的线由 y - y0 = ((y0 - y1)/(x0 - x1)) * (x - x0)
给出的公式。您可以使用 slice 语法从列表中获取 2 个元素切片;例如要获得 [2.5, 3.4]
你会使用 x[1:3]
.
然后您可以使用切片语法实现线性插值公式来计算线性多项式插值的系数。
您可以使用 numpy
中的 polyfit
,它为您提供系数列表,从最高阶(这里有两个关于您的阶 1
多项式的系数)对于一个给出拟合。因此,下面将为您提供每个段的系数列表 [1, 2.5]
、[2.5, 3.4]
、等等
import numpy as np
x = np.array(x)
y = np.array(y)
[np.polyfit(x[i:(i+2)], y[i:(i+2)],1) for i in range(len(x)-1)]
#[array([ 1.33333333, 0.66666667]), array([ 2., -1.]), array([-0.625, 7.925]), array([ -1.5, 13. ])]
我对编程还很陌生,我想尝试编写一个分段线性插值函数。 (也许这是用 numpy.interp 或 scipy.interpolate.interp1d 完成的)
假设我得到如下数据:x=[1, 2.5, 3.4, 5.8, 6] y=[2, 4, 5.8, 4.3, 4]
我想设计一个分段插值函数,使用 Python 给出 1 到 2.5、2.5 到 3.4 之间的所有线性多项式片段的系数等等。 当然,matlab 有 interp1 函数可以执行此操作,但我使用 python,我想做与 matlab 完全相同的工作,但 python 只给出值而不是线性多项式系数! (在 matlab 中我们可以用 pp.coefs 得到这个)。 但是如何在 python numpy.interp 中得到 pp.coefs 呢?
如果您正在进行线性插值,您可以只使用从点 (x0, y0)
到 (x1, y1)
的线对它们进行插值的线由 y - y0 = ((y0 - y1)/(x0 - x1)) * (x - x0)
给出的公式。您可以使用 slice 语法从列表中获取 2 个元素切片;例如要获得 [2.5, 3.4]
你会使用 x[1:3]
.
然后您可以使用切片语法实现线性插值公式来计算线性多项式插值的系数。
您可以使用 numpy
中的 polyfit
,它为您提供系数列表,从最高阶(这里有两个关于您的阶 1
多项式的系数)对于一个给出拟合。因此,下面将为您提供每个段的系数列表 [1, 2.5]
、[2.5, 3.4]
、等等
import numpy as np
x = np.array(x)
y = np.array(y)
[np.polyfit(x[i:(i+2)], y[i:(i+2)],1) for i in range(len(x)-1)]
#[array([ 1.33333333, 0.66666667]), array([ 2., -1.]), array([-0.625, 7.925]), array([ -1.5, 13. ])]