Python 具有numpy的函数的值
假设我们有一个采样函数Python 具有numpy的函数的值,python,arrays,numpy,Python,Arrays,Numpy,假设我们有一个采样函数y=f(x),由一个严格递增的数字数组x和一个数组y给出: import numpy as np import matplotlib.pyplot as plt x = np.linspace(0, 4, 11) # [ 0. 0.4 0.8 1.2 1.6 2. 2.4 2.8 3.2 3.6 4. ] y = np.array([0, 1, 2, 3, 3, 1, -1, -4, -5, -6, -7]) plt.plot(x,y);
y=f(x)
,由一个严格递增的数字数组x
和一个数组y
给出:
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 4, 11) # [ 0. 0.4 0.8 1.2 1.6 2. 2.4 2.8 3.2 3.6 4. ]
y = np.array([0, 1, 2, 3, 3, 1, -1, -4, -5, -6, -7])
plt.plot(x,y); plt.show()
例如,是否有一种自然的方法,使用numpy来计算值f(1.2)
或f(2.3)
?通过最近邻(
f(2.3)
应为f(2.4)=-1)或线性插值
这种方法可以工作,但相当不实用:首先手动查找i
,使距离abs(x[i]-2.2)
最小,然后返回y[i]
。我可以想象numpy有一个内置函数来实现这一点?如果插值用于可视化是目标,那么简单地绘制函数就可以了。Numpy在数据点之间绘制直线,这相当于线性插值
但是,如果要使用插值,可以将其用于线性插值,也可以将中的某些函数用于任何类型的插值。最后,只需将索引四舍五入即可执行最近邻插值
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 4, 11) # [ 0. 0.4 0.8 1.2 1.6 2. 2.4 2.8 3.2 3.6 4. ]
y = np.array([0, 1, 2, 3, 3, 1, -1, -4, -5, -6, -7])
xi = np.linspace(0, 4, 1000)
# a) nearest neighbor rounding
dx = x[1] - x[0]
i = np.round(xi/dx).astype(dtype=int)
y1 = y[i]
# b) linear interpolation
y2 = np.interp(xi, x, y)
plt.plot(x, y, '.', label='original points')
plt.plot(xi, y1, label='rounding (nearest neighbor)')
plt.plot(xi, y2, label='linear interpolation')
plt.legend(loc='best')
plt.show()
在@ali\m的评论中给出的解决方案效果良好:
np.interp(1.2, x, y) # 3.0
np.interp(2.3, x, y) # -0.5
np.interp(2.4, x, y) # -1
您必须更具体地说明“计算值f(1.2)
”的含义。严格地说,您的函数仅定义在x
中给出的值上,因此,如果您想估计其他任意位置的值,则需要对其进行插值。有很多方法可以执行插值,例如最近邻法、线性法、立方法等。请看一看并。@ali_m我编辑并补充说,最近邻法或线性插值对我来说都可以,只要有效(我有数百万个采样点要在短时间内处理)@Basj如果最近邻是正常的,性能是一个问题,为什么不将x四舍五入到最近的可用值?否则,您的问题已在上述ali_m的评论中得到有效回答。