python中的对数插值
使用python中的对数插值,python,numpy,interpolation,Python,Numpy,Interpolation,使用numpy.interp我能够计算离散数据点处具有给定值的函数的一维分段线性插值 返回对数插值也是一个类似的函数吗?如果我理解正确,您有一些离散数据,希望得到一组平滑的值,这些值将出现在您的值之间。我假设你不想要一个近似数据的对数函数方程 不幸的是,numpy并没有线性分段插值之外的任何东西,但如果您考虑使用它,它确实有一个更强大的插值函数。有关更多详细信息,请参阅文档 它包括更复杂的插值,比如“三次”插值,它会给你非常平滑的近似值,但它不会是对数,也不会给你一个方程 如果你想要一个方程,你
numpy.interp
我能够计算离散数据点处具有给定值的函数的一维分段线性插值
返回对数插值也是一个类似的函数吗?如果我理解正确,您有一些离散数据,希望得到一组平滑的值,这些值将出现在您的值之间。我假设你不想要一个近似数据的对数函数方程 不幸的是,numpy并没有线性分段插值之外的任何东西,但如果您考虑使用它,它确实有一个更强大的插值函数。有关更多详细信息,请参阅文档 它包括更复杂的插值,比如“三次”插值,它会给你非常平滑的近似值,但它不会是对数,也不会给你一个方程
如果你想要一个方程,你要找的是回归技术而不是插值,但我认为你不是。在过去,我只是在对数空间中包装法线插值,即
def log_interp(zz, xx, yy):
logz = np.log10(zz)
logx = np.log10(xx)
logy = np.log10(yy)
return np.power(10.0, np.interp(logz, logx, logy))
就个人而言,我更喜欢(正如@mylesgallagher提到的),例如:
import scipy as sp
import scipy.interpolate
def log_interp1d(xx, yy, kind='linear'):
logx = np.log10(xx)
logy = np.log10(yy)
lin_interp = sp.interpolate.interp1d(logx, logy, kind=kind)
log_interp = lambda zz: np.power(10.0, lin_interp(np.log10(zz)))
return log_interp
然后您可以将其作为任意值上的函数调用。您的问题不清楚“对数插值”的确切含义。你能给出一些输入/输出的例子吗?我试过这个方法,但它不能插值,超出了插值的范围。你知道估算新值的方法吗?@LuisGonzález scipy对外推法没有广泛的支持,但请查看以下答案:,注意:外推法,尤其是样条曲线,可能会导致令人惊讶的行为(例如,曲线可能在输入范围外急剧“转向”)。