python interpolation函数_python中的interp函数就像matlab一样

这篇博客探讨了线性插值的局限性,并建议使用双三次样条曲线进行更平滑的数据插值。作者提供了Matlab中实现这一方法的代码示例,并讨论了如何处理插值和外推,以及对输入点间隔的要求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需要提出几个问题:

您是否只关注线性插值(即"连接点"用直线段)?这简单但有点讨厌。您可以使用更高阶曲线(即双三次样条曲线)获得更好的结果,但为此您需要提供更多信息来确定唯一解决方案(即端点一阶导数)。

您是否希望同时平滑曲线,或者您是否希望它完全通过您的给定点?

您的输入点是否均匀间隔(即沿x轴)?

您的数据不仅显示插值,还显示外推(即您的最后一点不在数据末尾) - 这实际上是您想要的吗?

Matlab documentation说" interp将0插入原始信号,然后将低通内插滤波器应用于扩展序列"。

你可以像这样制作一个包装器:

import numpy as np

from scipy.interpolate import interp1d

def interp(ys, mul):

# linear extrapolation for last (mul - 1) points

ys = list(ys)

ys.append(2*ys[-1] - ys[-2])

# make interpolation function

xs = np.arange(len(ys))

fn = interp1d(xs, ys, kind="cubic")

# call it on desired data points

new_xs = np.arange(len(ys) - 1, step=1./mul)

return fn(new_xs)

然后像一样工作

>>> interp([1,2,3,4,5,6,7,8,9,10], 2)

array([ 1. , 1.5, 2. , 2.5, 3. , 3.5, 4. , 4.5, 5. ,

5.5, 6. , 6.5, 7. , 7.5, 8. , 8.5, 9. , 9.5,

10. , 10.5])

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值