各種插值方法的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.pswp.cn/web/77050.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/77050.shtml
英文地址,請注明出處:http://en.pswp.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機(單機) 使用的軟件名稱、版本號以及模塊…