Python在样条插值中保留点

时间:2012-08-09 13:09:33

标签: python numpy interpolation spline

我编写了一个执行样条插值的代码:

x1 = [ 0., 13.99576991, 27.99153981, 41.98730972, 55.98307963, 69.97884954, 83.97461944, 97.97038935, 111.9661593, 125.9619292, 139.9576991, 153.953469 ]
y1 = [ 1., 0.88675318, 0.67899118, 0.50012243, 0.35737022, 0.27081293, 0.18486778, 0.11043095, 0.08582272, 0.04946131, 0.04285015, 0.02901567]

x = np.array(x1) 
y = np.array(y1)

# Interpolate the data using a cubic spline to "new_length" samples
new_length = 50
new_x = np.linspace(x.min(), x.max(), new_length)
new_y = sp.interpolate.interp1d(x, y, kind='cubic')(new_x)

但是在生成new_xnew_y的新数据集中,原始点被消除,只保留第一个和最后一个值。我想保留原点。

2 个答案:

答案 0 :(得分:6)

是的,linspace不会生成x中的任何值,除了您传递给它的{(1}}和x.min())。

我没有一个很好的答案,但这是一种方法:

x.max()

此代码使用:

  • # Interpolate the data using a cubic spline to "new_length" samples new_length = 50 interpolated_x = np.linspace(x.min(), x.max(), new_length - len(x) + 2) new_x = np.sort(np.append(interpolated_x, x[1:-1])) # include the original points new_y = sp.interpolate.interp1d(x, y, kind='cubic')(new_x) 创建尽可能多的额外积分
  • np.linspace将额外点数组与np.append
  • 中的原始点相结合
  • x按顺序放置组合数组

答案 1 :(得分:0)

如果您的数据是统一的,这是另一种方式:

import numpy as np

def interpolate_add(x_add,num):
    x_add_ls=[]
    for i in range(x_add.shape[0]-1):
        x_add_ls += (np.linspace(x_add[i],x_add[i+1],num+2)[0:-1]).tolist()
    x_add_ls.append(x[-1])    
    return np.array(x_add_ls)

x=np.linspace(1,5,5)
print(x)
print(interpolate_add(x,3))

它打印:

[1。 2. 3. 4. 5。]

[1。 1.5 2. 2.5 3. 3.5 4. 4.5 5.]

在代码中,interpolate_add有两个参数

  • x_add是您的数据(numpy.array)。数据形状为(N,)

  • num是两个原始数据之间的插入数据编号。

例如,如果您的数据为array([1, 3]),而num为1,则结果为array([1, 2, 3])