gpt4 book ai didi

python - 评估 scipy 2D 沿曲线插值的输出

转载 作者:太空宇宙 更新时间:2023-11-04 00:27:04 29 4
gpt4 key购买 nike

我有数据 z 从二维函数 f 在网格点 x, y 采样,如 z = f( x, y).

很容易通过 f = interp2d(x, y, z) 将 fscipy.interp2d 进行插值。

但是,评估 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在 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 语句的输出相同。

最佳答案

interp2d 方法返回一个对象,其调用方法要求 x、y 向量是矩形网格的坐标。并且您没有从返回数组的对角线获得所需值的原因是它首先对 x, y 进行排序。

但是有一个解决方法,我也在Querying multiple points on a bivariate spline in the B-spline basis中使用过.执行后

import scipy.interpolate as si
f = si.interp2d(x, y, z)

评估 f 不是通过调用它,而是通过将其 tck 属性(后跟 x、y 坐标)传递给内部 bispeu 方法。像这样:

print(si.dfitpack.bispeu(f.tck[0], f.tck[1], f.tck[2], f.tck[3], f.tck[4], x, y)[0])

上面的返回和慢循环一样

print(np.array([f(xi, yi)[0] for xi, yi in zip(x, y)]))

说明

对象 f secret 地是阶数为 1 的 B 样条。样条参数(节点、系数、阶数)包含在其 tck 属性中,可以使用直接通过低阶例程达到预期效果。

(理想情况下,f 的调用方法会有一个 bool 参数 grid,我们将其设置为 False 以让它知道我们不需要网格计算。唉,还没实现。)

关于python - 评估 scipy 2D 沿曲线插值的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47087109/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com