Python 获取与numpy中另一个数组的元素相对应的数组的元素

Python 获取与numpy中另一个数组的元素相对应的数组的元素,python,arrays,numpy,Python,Arrays,Numpy,假设我有两个numpy数组,t和v,并假设t严格单调递增。在我的示例中,t表示一组时间点和v身体的相应速度。现在我想得到时间t=3时的速度。我如何才能做到这一点?如果您有scipy,则有一个函数可以精确执行以下操作: from scipy.interpolate import interp1d velocity = interp1d(t, v, kind="cubic") print(velocity(3.0)) 有关仅使用NumPy的线性插值,请参见位于的文档,您可以使用。 比如说, i

假设我有两个numpy数组,
t
v
,并假设
t
严格单调递增。在我的示例中,
t
表示一组时间点和
v
身体的相应速度。现在我想得到时间
t=3时的速度。我如何才能做到这一点?

如果您有scipy,则有一个函数可以精确执行以下操作:

from scipy.interpolate import interp1d

velocity = interp1d(t, v, kind="cubic")

print(velocity(3.0))

有关仅使用NumPy的线性插值,请参见位于

的文档,您可以使用。 比如说,

import numpy as np
t = np.linspace(0, 5, 100)
v = np.sin(t)
要在
t=3
时查找
v
的线性插值:

In [266]: np.interp(3, t, v)
Out[266]: 0.14107783526460238
请注意,如果希望在
t
的多个值处插入
v
,可以将iterable作为第一个参数传递给
np.interp

In [292]: np.interp(np.linspace(t.min(), t.max(), 10), t, v)
Out[292]: 
array([ 0.        ,  0.52741539,  0.8961922 ,  0.99540796,  0.79522006,
        0.35584199, -0.19056796, -0.67965796, -0.96431712, -0.95892427])
这比一次重复调用一个值的
np.interp
要有效得多


要获取数组的元素,
v
,它对应于
t=3
,您可以使用:

但是,请注意,
np.searchsorted
返回索引,其中
3
将插入
t
,以保持其排序性。因此
v[np.searchsorted(t,3)]
v[np.searchsorted(t,3)+1]
将速度夹在
t=3的中间

还要注意,
np.searchsorted
返回的索引可能比
t
(和
v
)的最大有效索引大1。如果
3>t.max()
,则会发生这种情况:

例如,如果
t
[1,2,3]

In [277]: np.searchsorted([1,2,3], 5)
Out[277]: 3
因此,为了防止可能的索引错误,请使用
np.clip
确保索引正确 介于
0
len(v)-1
之间:

idx = np.clip(np.searchsorted(t, 3), 0, len(v)-1)
v[idx]
np.interp
类似,
np.searchsorted
可以接受iterable(这里是第二个参数):

idx = np.clip(np.searchsorted(t, 3), 0, len(v)-1)
v[idx]
In [306]: v[np.clip(np.searchsorted(t, [3,4,5,6]), 0, len(v)-1)]
Out[306]: array([ 0.11106004, -0.7825875 , -0.95892427, -0.95892427])