gpt4 book ai didi

python - numpy:如何针对不同的时间步长在两个数组之间进行插值?

转载 作者:太空狗 更新时间:2023-10-30 00:13:31 24 4
gpt4 key购买 nike

我正在寻找一种方法来在表示时间起点和终点的两个 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 数组时,您会做一些根本性的错误。

最佳答案

scipy.interpolate.interp1d中的设施如果您将 sample 制成二维矩阵,则可以很容易地完成此操作。在您的情况下,您可以构造一个 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 的插值向量。

关于python - numpy:如何针对不同的时间步长在两个数组之间进行插值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36398847/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com