相关疑难解决方法(0)

给定1D输入时,scipy interp2d/bisplrep意外输出

使用scipy interp2d函数时,我一直有无效的输入错误.事实证明问题来自bisplrep函数,如下所示:

import numpy as np
from scipy import interpolate

# Case 1
x = np.linspace(0,1)
y = np.zeros_like(x)
z = np.ones_like(x)

tck = interpolate.bisplrep(x,y,z)  # or interp2d
Run Code Online (Sandbox Code Playgroud)

返回: ValueError: Invalid inputs

事实证明,我给出的测试数据interp2d仅包含第二轴的一个不同值,如上面的测试样本.该bisplrep函数内部interp2d认为它作为一个无效的输出:这可以被认为是可接受的行为:interp2dbisplrep期待的2D网格,我只是给他们值沿着一条线.

另外,我发现错误信息还不清楚.其中一个可能包括一个测试interp2d来处理这种情况:类似的东西

if len(np.unique(x))==1 or len(np.unique(y))==1: 
    ValueError ("Can't build 2D splines if x or y values are all the same")
Run Code Online (Sandbox Code Playgroud)

可能足以检测到这种无效输入,并引发更明确的错误消息,甚至直接调用更合适的interp1d函数(这在这里工作得很好)


我以为我已正确理解了这个问题.但是,请考虑以下代码示例:

# Case 2
x = np.linspace(0,1)
y …
Run Code Online (Sandbox Code Playgroud)

python interpolation scipy

4
推荐指数
1
解决办法
2138
查看次数

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

我在网格点z从 2D 函数f中采样了数据x, y,如z = f(x, y).

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

但是,评估会f(x, y)返回整个 2D 网格,就好像我已经完成了一样

xx, yy = np.meshgrid(x, y)
f(xx, yy)
Run Code Online (Sandbox Code Playgroud)

我想要的行为是简单地返回 values [f(x[i], y[i]) for i in range(len(x))],我相信这是 numpy 中几乎任何其他方法的行为。

我想要这种行为的原因是我正在寻找f由对沿着“时间”表面描绘的路径(t, u(t))

np.diag(f(t, u(t)))与 不同也令人惊讶np.array([f(ti, u(ti)) for ti in t]),所以我不清楚如何f(t, u(t))从通过interp2d.

编辑:关于diag,我只是认为我们应该有np.diag(f(t, u(t))) == np.array([f(ti, u(ti)) …

python numpy scipy

4
推荐指数
2
解决办法
1854
查看次数

标签 统计

python ×2

scipy ×2

interpolation ×1

numpy ×1