5

スプライン補間を実行するコードを作成しました。

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は元のポイントが削除され、最初と最後の値のみが保持されます。元のポイントを残しておきたい。

4

2 に答える 2

6

そうです、渡した値(および)を除いてlinspace、の値は生成されません。xx.min()x.max()

私は素晴らしい答えを持っていませんが、これを行う1つの方法があります:

# 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
  • np.sort結合された配列を整理する
于 2012-08-09T13:32:06.093 に答える
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))

印刷します:</ p>

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

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

コードにinterpolate_addは、2つのパラメーターがあります

  • x_addあなたのデータ(numpy.array)です。データの形状は(N、)

  • num2つの元のデータの間に挿入データ番号です。

たとえば、データが1でarray([1, 3])numが1の場合、結果は次のようになります。array([1, 2, 3])

于 2018-10-22T08:54:56.947 に答える