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的评论中得到有效回答。