我从2D函数f
的网格点x, y
处采样了数据z
,就像在z = f(x, y)
中一样。
使用scipy.interp2d
通过f = interp2d(x, y, z
对f
进行插值很容易)。
但是,计算f(x, y)
会返回整个2D网格,就好像我已经这样做了一样
xx, yy = np.meshgrid(x, y)
f(xx, yy)
我想要的行为是简单地返回值[f(x[i], y[i]) for i in range(len(x))]
,我相信这是numpy中几乎任何其他方法的行为。
我想要这种行为的原因是,我正在寻找一对(t, u(t))
在“时间”上沿着f
表面所描绘出的路径。
同样令人惊讶的是,np.diag(f(t, u(t)))
不同于np.array([f(ti, u(ti)) for ti in t])
,所以我不清楚如何从interp2d
返回的内容中获取路径f(t, u(t))
。
编辑:关于diag
,我只是觉得我们应该有np.diag(f(t, u(t))) == np.array([f(ti, u(ti)) for ti in t])
,但事实并非如此。
完整示例:
def f(t, u):
return (t**2) * np.exp((u**2) / (1 + u**2))
x = np.linspace(0, 1, 250)
xx, yy = np.meshgrid(x, x)
z = f(xx, yy)
f = scipy.interpolate.interp2d(x, y, z)
print(f(x, y))
print(np.array([f(xi, yi)[0] for xi, yi in zip(x, y)]))
我希望两个print
语句的输出是相同的。
https://stackoverflow.com/questions/47087109
复制相似问题