我正在寻找一种方法来在两个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个时间步长。如何在fst
和snd
之间插值?以fst
和snd
的第一个条目为例,我希望能够检索每个时间步长的值,如下所示:
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数组上做一些根本性的错误。
2条答案
按热度按时间wnvonmuf1#
scipy.interpolate.interp1d中的工具可以很容易地完成这一点,如果你将你的样本形成一个2D矩阵。在你的例子中,你可以构造一个2xN数组,并构造一个插值函数,它向下运算列:
字符串
然后可以在任何感兴趣的时间生成插值向量。例如
linfit(2)
产生:型
或者,您可以使用时间值向量调用
linfit()
,例如:linfit([1,2,3])
给出:型
如果你只做线性插值,你也可以做类似的事情:
型
以在任何时间t直接计算内插向量。
camsedfj2#
这种方法类似,但使用更简单的符号:
字符串
fraction
是一个介于0和1之间的数字,它决定了你在起点和终点之间的距离(0表示你在start_vector
,1表示你在end_vector
,0.5表示你在这两个向量之间的中点,等等)。