各种插值方法的Python实现

插值方法的Python实现

1. 线性插值(Linear Interpolation)
  • 原理:用直线连接相邻数据点,计算中间点的值。

  • 实现

    import numpy as np
    from scipy.interpolate import interp1dx = np.array([0, 1, 2, 3, 4])
    y = np.array([0, 2, 1, 3, 4])
    f = interp1d(x, y, kind='linear')  # 创建插值函数
    x_new = np.linspace(0, 4, 10)
    y_new = f(x_new)  # 插值结果
  • 优点:计算快,结果稳定。

  • 缺点:曲线不平滑,不适用于高波动数据。

  • 场景:实时数据处理、简单填充缺失值。

2. 多项式插值(Polynomial Interpolation)
  • 原理:通过多项式拟合所有数据点(如拉格朗日多项式)。

  • 实现

    from scipy.interpolate import lagrangepoly = lagrange(x, y)  # 生成拉格朗日多项式
    y_new = poly(x_new)
  • 优点:严格通过所有数据点。

  • 缺点:高阶多项式易过拟合(龙格现象)。

  • 场景:理论分析、低阶多项式插值。

3. 三次样条插值(Cubic Spline)
  • 原理:分段三次多项式,保证一阶和二阶导数连续。

  • 实现

    f = interp1d(x, y, kind='cubic')
    y_new = f(x_new)
  • 优点:曲线平滑,适合连续数据。

  • 缺点:计算量较大。

  • 场景:自然信号(如音频、图像)、平滑曲线生成。

4. 最近邻插值(Nearest-neighbor)
  • 原理:取距离最近的已知点的值。

  • 实现

    f = interp1d(x, y, kind='nearest')
    y_new = f(x_new)
  • 优点:保留数据离散特性。

  • 缺点:阶梯状不连续。

  • 场景:分类数据插值、图像像素处理。

5. Pandas 内置插值
  • 原理:直接对 Series 或 DataFrame 进行缺失值填充。

  • 实现

    import pandas as pds = pd.Series([1, np.nan, 3, np.nan, 5])
    s_interp = s.interpolate(method='linear')  # 可选 cubic, quadratic, spline 等
  • 方法参数

    • method='time':按时间索引插值。

    • method='spline':需指定 order(多项式阶数)。

  • 场景:时间序列数据清洗、缺失值填充。

进阶功能

1. 外推(Extrapolation)
  • 功能:允许对超出原始数据范围的点进行插值。

  • 实现

    f = interp1d(x, y, kind='cubic', fill_value='extrapolate')
    y_ext = f([-1, 5])  # 外推 x=-1 和 x=5 的值
2. 非均匀数据插值
  • 问题:当数据点非均匀分布时,需指定插值轴参数。

  • 示例

    x = np.array([0, 2, 5, 9])  # 非均匀分布
    y = np.array([3, 1, 4, 2])
    f = interp1d(x, y, kind='linear', assume_sorted=False)
3. Akima 插值
  • 特点:避免三次样条的过度震荡。

  • 实现

    from scipy.interpolate import Akima1DInterpolatorakima = Akima1DInterpolator(x, y)
    y_new = akima(x_new)

方法对比与选型

方法平滑性计算速度外推支持适用场景
线性插值实时计算、简单填充
三次样条自然信号、平滑曲线
多项式插值理论分析、低阶数据
最近邻极快离散分类数据
Pandas 插值可调部分支持时间序列、表格数据清洗

注意事项

  1. 单调性要求
    大多数插值方法要求 x 数据单调递增,否则会报错。若数据无序,需先排序:

    sorted_idx = np.argsort(x)
    x_sorted = x[sorted_idx]
    y_sorted = y[sorted_idx]

  2. 缺失值处理
    SciPy插值函数不支持输入含 NaN 的数据,需预先删除或填充:

    y_clean = y[~np.isnan(y)]

  3. 性能优化
    对超大数据(如百万级数据点),优先使用 kind='linear' 或 kind='nearest'

完整示例

import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import interp1d# 原始数据
x = np.array([0, 2, 3, 5, 8])
y = np.array([1, 4, 2, 6, 3])# 生成插值函数(三次样条)
f_cubic = interp1d(x, y, kind='cubic', fill_value='extrapolate')
x_new = np.linspace(0, 8, 100)
y_cubic = f_cubic(x_new)# 绘图对比
plt.scatter(x, y, color='red', label='原始数据')
plt.plot(x_new, y_cubic, label='三次样条插值')
plt.legend()
plt.show()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/77050.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

重新定义户外防护!基于DeepSeek的智能展开伞棚系统技术深度解析

从“手动操作”到“感知决策”,AI重构城市空间弹性 全球极端天气事件频发,传统伞棚依赖人工展开/收纳,存在响应滞后(暴雨突袭时展开需3-5分钟)、抗风能力弱(8级风损毁率超60%)、空间利用率低等痛…

Redis 基础和高级用法入门

redis 是什么? Redis是一个远程内存数据库,它不仅性能强劲,而且还具有复制特性以及为解决问题而生的独一无二的数据模型。Redis提供了5种不同类型的数据结构,各式各样的问题都可以很自然地映射到这些数据结构上&#xff1a…

常见数据库关键字示例 SQL 及执行顺序分析(带详细注释)

示例 SQL 及执行顺序分析(带详细注释) 示例 1:基础查询(含多表关联、过滤、分组、排序) SELECT -- 1. 选择字段(包含聚合函数和别名)e.department, COUNT(e.employee_id) AS total_employees, …

设计模式--建造者模式详解

建造者模式 建造者模式也属于创建型模式,它提供了一种创建对象的最佳方式 定义:将一个复杂对象的构建和它的表示分离,使得同样的构建过程可以创建不同的表示(假设有不同的建造者实现类,可以产生不同的产品&#xff09…

PCB 过孔铜厚的深入指南

***前言:在上一期的文章中介绍了PCB制造的工艺流程,但仍然想在过孔的铜厚和PCB的过孔厚径比两个方面再深入介绍。 PCB铜厚的定义 电路中铜的厚度以盎司(oz)**表示。那么,为什么用重量单位来表示厚度呢? 盎司(oz)的定义 将1盎司(28.35 克)的铜…

如何配置 Conda 使用镜像源加速

如何配置 Conda 使用镜像源加速 为了提高使用 Anaconda 或 Miniconda 时包管理的速度,特别是在国内网络环境下,可以通过配置镜像源来实现更快的下载。以下是详细的步骤说明: 1. 安装 Conda(如果尚未安装) 如果你还没…

【k8s】k8s是怎么实现自动扩缩的

Kubernetes 提供了多种自动扩缩容机制,主要包括 Pod 水平自动扩缩(HPA)、垂直 Pod 自动扩缩(VPA) 和 集群自动扩缩(Cluster Autoscaler)。以下是它们的实现原理和配置方法: 1. Pod …

Reflex 完全指南:用 Python 构建现代 Web 应用的终极体验

“写 Python,就能构建 Web 前端。”——这不再是梦想,而是由 Reflex 带来的现实。 过去,构建一个现代 Web 应用意味着你要学会前端(React/JS/HTML/CSS) 后端(Flask/Django) API 交互&#xff08…

Vue实战(08)解决 Vue 项目中路径别名 `@` 在 IDE 中报错无法识别的问题

一、引言 ​ 在 Vue 项目开发过程中,路径别名是一个非常实用的特性,它能够帮助开发者简化文件引用路径,提高代码的可读性和可维护性。其中, 作为一个常见的路径别名,通常被用来指向项目的 src 目录。然而,…

5.学习笔记-SpringMVC(P61-P70)

SpringMVC-SSM整合-接口测试 (1)业务层接口使用junit接口做测试 (2)表现层用postman做接口测试 (3)事务处理— 1)在SpringConfig.java,开启注解,是事务驱动 2)配置事务管理器(因为事务管理器是要配置数据源对象&…

[论文阅读]REPLUG: Retrieval-Augmented Black-Box Language Models

REPLUG: Retrieval-Augmented Black-Box Language Models REPLUG: Retrieval-Augmented Black-Box Language Models - ACL Anthology NAACL-HLT 2024 在这项工作中,我们介绍了RePlug(Retrieve and Plug),这是一个新的检索增强型…

Mysql的深度分页查询优化

一、深度分页为什么慢? 当执行 SELECT * FROM orders ORDER BY id LIMIT 1000000, 10 时: MySQL 会扫描前 1,000,010 行,丢弃前 100 万行,仅返回 10 行。偏移量(offset)越大,扫描行数越多&…

最新扣子(Coze)案例教程:Excel数据生成统计图表,自动清洗数据+转换可视化图表+零代码,完全免费教程

大家好,我是斜杠君。 知识星球群有同学和我说每天的工作涉及很多数据表的重复操作,想学习Excel数据表通过大模型自动转数据图片的功能。 今天斜杠君就带大家一起搭建一个智能体,以一个销售行业数据为例,可以快速实现自动清洗Exc…

Uniapp 中缓存操作指南

在 Uniapp 中,你可以使用三种方式操作缓存:同步方法、异步方法和 Vuex 持久化存储。以下是详细的设置、获取和清除缓存的方法: 1. 同步方法 设置缓存 uni.setStorageSync(key, value); // 示例 uni.setStorageSync(token, abc123); 获取缓存 const value = uni.getStor…

k8s的yaml文件里的volume跟volumeMount的区别

volume 是 Pod 级别的资源,用于定义存储卷。它是一个独立于容器的存储资源,可以被一个或多个容器共享使用。volume 的定义位于 Pod 的 spec.volumes 部分。 特点 独立性:volume 是 Pod 的一部分,而不是容器的一部分。它独立于容…

梅毒单阳能否通过国企体检?

国企体检通常会参照公务员体检标准进行,梅毒检测是其中的常规项目。 一、明确“梅毒单阳”的定义 检测指标解析 TPPA阳性RPR阴性:可能为既往感染已治愈,或极早期/晚期梅毒; RPR阳性TPPA阴性:需警惕假阳性&#xff08…

Python 爬虫实战 | 企名科技

文章目录 一、企名科技1、目标网站2、网站特点3、确定解密位置4、扣js代码 一、企名科技 1、目标网站 网址:https://wx.qmpsee.com/articleDetail?idfeef62bfdac45a94b9cd89aed5c235be目标数据:获取消费行业研究下面的13篇文章数据 2、网站特点 服…

Pikachu靶场

本质是信任了不可信的客户端输入。防御核心: 永不信任客户端提交的权限参数(如 user_id, role)。强制服务端校验用户身份与操作权限。定期审计权限模型,避免业务迭代引入新漏洞。 水平越权 1,按照网站的提示要求登录 进…

C++区别于C语言的提升用法(万字总结)

1.namespace产生原因 在C语言中,变量,函数,以至于类都是大量存在的,因此会产生大量的名称存在于全局作用域中,可能产生很多冲突,至此c的祖师爷为避免命名冲突和名字的污染,造出来了关键字names…

数据库day-07

一、实验名称和性质 子查询 验证 设计 二、实验目的 1.掌握子查询的嵌套查询; 2.掌握集合操作 3.了解EXISTS嵌套查询方法; 三、实验的软硬件环境要求 硬件环境要求: PC机(单机) 使用的软件名称、版本号以及模块…