假设我在两个数组(x,y)
和x
中有一组y
点。
我想为y
的新值插入x_new
的值。但是,此插值应使用数组中{strong>的“以前看到的”)值y
。
换句话说,插值
x = [0, 10, 15]
y = [1, 3, 6]
在
x_new = [1, 2, 9, 14, 16]
应该返回:
y_new = [1, 1, 1, 3, 6]
我怎么能在numpy中做到这一点?循环并手动检查以前的值是我唯一的选择吗?
y_new
的第一个元素是1
,这是因为其关联的x_new
值为1
,最大值小于1
,{ {1}}值为x
,其0
为y
。
考虑这一点的最佳方式可能是将1
视为时间值,我希望用最新的x
值填充y_new
。
答案 0 :(得分:3)
假设x
正在递增。以下是使用np.searchsorted
进行插值的方法:
In [194]: x
Out[194]: array([ 0, 10, 15])
In [195]: y
Out[195]: array([1, 3, 6])
In [196]: x_new
Out[196]: array([ 1, 2, 9, 14, 15, 16])
In [197]: i = np.searchsorted(x, x_new, side='right') - 1
In [198]: y_new = y[i]
In [199]: y_new
Out[199]: array([1, 1, 1, 3, 6, 6])
(x_new
不必排序。)
如果x_new
中的任何值小于x[0]
,则结果不正确,但这不应该是问题,因为在这种情况下没有定义过程。