numpy:如何在不同的时间步长内插两个数组?

abithluo  于 2023-08-05  发布在  其他
关注(0)|答案(2)|浏览(107)

我正在寻找一种方法来在两个numpy数组之间进行简单的线性插值,这两个数组表示时间上的起点和终点。
这两个数组具有相同的长度:

fst = np.random.random_integers(5, size=(10.))
>>> array([4, 4, 1, 3, 1, 4, 3, 2, 5, 2])
snd = np.random.random_integers(5, size=(10.))
>>> array([1, 1, 3, 4, 1, 5, 5, 5, 4, 3])

字符串
在我的起点和终点之间有3个时间步长。如何在fstsnd之间插值?以fstsnd的第一个条目为例,我希望能够检索每个时间步长的值,如下所示:

np.interp(1, [1,5], [4,1])    
np.interp(2, [1,5], [4,1])
...
# that is
np.interp([1,2,3,4,5], [1,5], [4,1])
>>> array([ 4.  ,  3.25,  2.5 ,  1.75,  1.  ])


但不仅仅是第一个条目,而是整个数组。
显然,这不会做到这一点:

np.interp(1, [1,5], [fst,snd])


我知道我在一个循环中到达那里,例如。

[np.interp(2, [1,5], [item,snd[idx]]) for idx,item in enumerate(fst)]
>>> [3.25, 3.25, 1.5, 3.25, 1.0, 4.25, 3.5, 2.75, 4.75, 2.25]


但我相信当你在numpy数组上做一些根本性的错误。

wnvonmuf

wnvonmuf1#

scipy.interpolate.interp1d中的工具可以很容易地完成这一点,如果你将你的样本形成一个2D矩阵。在你的例子中,你可以构造一个2xN数组,并构造一个插值函数,它向下运算列:

from scipy.interpolate import interp1d
fst = np.array([4, 4, 1, 3, 1, 4, 3, 2, 5, 2])
snd = np.array([1, 1, 3, 4, 1, 5, 5, 5, 4, 3])
linfit = interp1d([1,5], np.vstack([fst, snd]), axis=0)

字符串
然后可以在任何感兴趣的时间生成插值向量。例如linfit(2)产生:

array([ 3.25,  3.25,  1.5 ,  3.25,  1.  ,  4.25,  3.5 ,  2.75,  4.75,  2.25])


或者,您可以使用时间值向量调用linfit(),例如:linfit([1,2,3])给出:

array([[ 4.  ,  4.  ,  1.  ,  3.  ,  1.  ,  4.  ,  3.  ,  2.  ,  5.  ,  2.  ],
       [ 3.25,  3.25,  1.5 ,  3.25,  1.  ,  4.25,  3.5 ,  2.75,  4.75,           2.25],
       [ 2.5 ,  2.5 ,  2.  ,  3.5 ,  1.  ,  4.5 ,  4.  ,  3.5 ,  4.5 , 2.5 ]])


如果你只做线性插值,你也可以做类似的事情:

((5-t)/(5-1)) * fst + ((t-1)/(5-1)) * snd


以在任何时间t直接计算内插向量。

camsedfj

camsedfj2#

这种方法类似,但使用更简单的符号:

#Suppose you have some start and end points
start_vector = numpy.array([4, 4, 1, 3, 1, 4, 3, 2, 5, 2])
end_vector = numpy.array([-40, 40, -10, -30, 10, 40, 30, -8, 50, 20])

#To get a vector that's located in-between:
intermediate_vector = start_vector + (end_vector - start_vector) * fraction

字符串
fraction是一个介于0和1之间的数字,它决定了你在起点和终点之间的距离(0表示你在start_vector,1表示你在end_vector,0.5表示你在这两个向量之间的中点,等等)。

相关问题