如何使用 scipy.interpolate.interp2d 作为数据向量?
How to use scipy.interpolate.interp2d for a vector of data?
我有一个 table 量的测量值,该量取决于两个参数。
假设我有一个函数 fuelConsumption(speed, temperature)
,网格上的数据是已知的。
现在我想从 pandas.DataFrame
(和 return 一个向量中插入大量测量数据点(速度、温度)的预期 fuelConsumption
数据点)。
我目前正在使用 SciPy 的 interpolate.interp2d
进行插值,但是当将参数作为两个向量 [s1,s2]
和 [t1,t2]
传递时(为简单起见,只有两个有序值) 它将构建一个网格并且 return:
[[f(s1,t1), f(s2,t1)], [f(s1,t2), f(s2,t2)]]
我希望得到的结果是:
[f(s1,t1), f(s2, t2)]
如何插值以获得我想要的输出?
从 scipy v0.14 开始,您可以将 scipy.interpolate.RectBivariateSpline
与 grid=False
一起使用:
import numpy as np
from scipy.interpolate import RectBivariateSpline
from matplotlib import pyplot as plt
x, y = np.ogrid[-1:1:10j,-1:1:10j]
z = (x + y)*np.exp(-6.0 * (x * x + y * y))
spl = RectBivariateSpline(x, y, z)
xi = np.linspace(-1, 1, 50)
yi = np.linspace(-1, 1, 50)
zi = spl(xi, yi, grid=False)
fig, ax = plt.subplots(1, 1)
ax.hold(True)
ax.imshow(z, cmap=plt.cm.coolwarm, origin='lower', extent=(-1, 1, -1, 1))
ax.scatter(xi, yi, s=60, c=zi, cmap=plt.cm.coolwarm)
我有一个 table 量的测量值,该量取决于两个参数。
假设我有一个函数 fuelConsumption(speed, temperature)
,网格上的数据是已知的。
现在我想从 pandas.DataFrame
(和 return 一个向量中插入大量测量数据点(速度、温度)的预期 fuelConsumption
数据点)。
我目前正在使用 SciPy 的 interpolate.interp2d
进行插值,但是当将参数作为两个向量 [s1,s2]
和 [t1,t2]
传递时(为简单起见,只有两个有序值) 它将构建一个网格并且 return:
[[f(s1,t1), f(s2,t1)], [f(s1,t2), f(s2,t2)]]
我希望得到的结果是:
[f(s1,t1), f(s2, t2)]
如何插值以获得我想要的输出?
从 scipy v0.14 开始,您可以将 scipy.interpolate.RectBivariateSpline
与 grid=False
一起使用:
import numpy as np
from scipy.interpolate import RectBivariateSpline
from matplotlib import pyplot as plt
x, y = np.ogrid[-1:1:10j,-1:1:10j]
z = (x + y)*np.exp(-6.0 * (x * x + y * y))
spl = RectBivariateSpline(x, y, z)
xi = np.linspace(-1, 1, 50)
yi = np.linspace(-1, 1, 50)
zi = spl(xi, yi, grid=False)
fig, ax = plt.subplots(1, 1)
ax.hold(True)
ax.imshow(z, cmap=plt.cm.coolwarm, origin='lower', extent=(-1, 1, -1, 1))
ax.scatter(xi, yi, s=60, c=zi, cmap=plt.cm.coolwarm)