python 中的对数插值
Logarithmic interpolation in python
使用 numpy.interp
我能够计算一维分段线性插值到在离散数据点处具有给定值的函数。
是不是和return我的对数插值类似的功能?
如果我对您的理解正确,您有一些离散数据,您希望获得一组平滑的值,这些值将出现在您拥有的值之间。我假设您不想要近似数据的对数函数方程。
不幸的是,numpy 除了线性分段插值之外没有任何东西,但是如果您查看使用 SciPy it does have a more powerful interpolation function. See SciPy's interpolate 文档以获取更多详细信息。
它包括更复杂的插值,如 'cubic' 插值,它会给你非常平滑的近似值,但它不会是对数,也不会给你方程。
如果你想要一个方程式,你正在寻找的是回归技术而不是插值法,但我认为你不是。
过去,我只是将正常的插值包装在 log-space 中,即
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))
就个人而言,我更喜欢 scipy interpolation functions(正如@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
然后您可以将其作为任意值的函数调用。
使用 numpy.interp
我能够计算一维分段线性插值到在离散数据点处具有给定值的函数。
是不是和return我的对数插值类似的功能?
如果我对您的理解正确,您有一些离散数据,您希望获得一组平滑的值,这些值将出现在您拥有的值之间。我假设您不想要近似数据的对数函数方程。
不幸的是,numpy 除了线性分段插值之外没有任何东西,但是如果您查看使用 SciPy it does have a more powerful interpolation function. See SciPy's interpolate 文档以获取更多详细信息。
它包括更复杂的插值,如 'cubic' 插值,它会给你非常平滑的近似值,但它不会是对数,也不会给你方程。
如果你想要一个方程式,你正在寻找的是回归技术而不是插值法,但我认为你不是。
过去,我只是将正常的插值包装在 log-space 中,即
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))
就个人而言,我更喜欢 scipy interpolation functions(正如@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
然后您可以将其作为任意值的函数调用。