Python 获取与numpy中另一个数组的元素相对应的数组的元素
假设我有两个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
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])