You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SciPy中已弃用的interp1d线性插值函数的替代方案咨询

SciPy中已弃用的interp1d线性插值函数的替代方案咨询

嘿,我刚好踩过这个坑!现在SciPy里interp1d确实已经被标记为弃用了,如果你需要实现和它一样的线性插值+返回可调用插值函数的效果,有两个非常顺手的替代方案:


方案一:使用LinearNDInterpolator

这个插值器原生支持1D到ND的线性插值,用法和你原来的interp1d几乎无缝衔接,初始化后直接就能像函数一样调用计算插值结果。

修改后的代码示例:

import numpy as np
from scipy.interpolate import Akima1DInterpolator, LinearNDInterpolator
import matplotlib.pyplot as plt


t = np.linspace(0.0, 1.0, 4)
y = np.array([1.0, 0.8, 0.7, 1.2])

# 替代原来的interp1d(kind="linear")
ak = LinearNDInterpolator(list(zip(t)), y)

tt = np.linspace(0.0, 1.0, 200)
# LinearNDInterpolator需要输入为2D数组,所以这里给tt加个维度
yy = ak(tt.reshape(-1, 1))

plt.plot(tt, yy)
plt.plot(t, y, "x")
plt.gca().set_aspect("equal")
plt.show()

方案二:使用make_interp_spline并指定k=1

如果你更习惯贴近interp1d的调用逻辑,make_interp_spline设置k=1就等价于线性插值,它同样会返回一个可调用的插值函数,用法和你原来的代码几乎完全一致。

修改后的代码示例:

import numpy as np
from scipy.interpolate import Akima1DInterpolator, make_interp_spline
import matplotlib.pyplot as plt


t = np.linspace(0.0, 1.0, 4)
y = np.array([1.0, 0.8, 0.7, 1.2])

# k=1指定线性插值,完美替代interp1d的linear模式
ak = make_interp_spline(t, y, k=1)

tt = np.linspace(0.0, 1.0, 200)
yy = ak(tt)

plt.plot(tt, yy)
plt.plot(t, y, "x")
plt.gca().set_aspect("equal")
plt.show()

运行上述任意一段代码后,你都会得到和原来一样的插值效果:一条连接原始数据点的线性分段曲线,原始的4个数据点用"x"标记在图上,坐标轴保持等比例显示。

备注:内容来源于stack exchange,提问作者Nico Schlömer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.16 09:05:34