Python插值数据列表

时间:2016-09-13 13:42:12

标签: python interpolation

我有这些数据:

X = [[10, 6, 0], [8, 6, 0], [4, 3, 0]]
Y = [[29, 28, 27], [26, 25, 24], [23, 22, 21]]

我需要在X中的值之间进行插值,例如:

D = np.linspace(10,0,num = 6)

Out:[  0.   2.   4.   6.   8.  10.]

所以结果应该是:

 "D"     "Y[0]"      "Y[1]"   "Y[2]"
  0        27          24        21
  2        ?           ?         ?
  4        ?           ?         23
  6        28          25        ?
  8        ?           26        ?
  10       29          ?         ?

我知道有np.interp()我试过,它只适用于一维列表:

z =[0,5,10]
v= [29,28,27]
x = np.linspace(10,0,num = 4)
d=np.interp(x, z, v)
print (d)

但是,如果我有列表清单,它就会起作用。

1 个答案:

答案 0 :(得分:2)

使用zip。此外,您似乎想要反转子列表。也许是这样的:

points = np.linspace(0,10,num = 6)

cols = (points,) + tuple(np.interp(points,x[::-1],y[::-1]) for x,y in zip(X,Y))

np.stack(cols,axis=1)

有输出:

array([[  0.        ,  27.        ,  24.        ,  21.        ],
       [  2.        ,  27.33333333,  24.33333333,  21.66666667],
       [  4.        ,  27.66666667,  24.66666667,  23.        ],
       [  6.        ,  28.        ,  25.        ,  23.        ],
       [  8.        ,  28.5       ,  26.        ,  23.        ],
       [ 10.        ,  29.        ,  26.        ,  23.        ]])

这表示插值。您可能希望在某些列的某些条目中使用外推法。