SciPy庫詳解

SciPy 是一個用于數學、科學和工程計算的 Python 庫,它建立在 NumPy 之上,提供了許多高效的算法和工具,用于解決各種科學計算問題。

CONTENT

  • 1. 數值積分
    • 功能
    • 代碼
  • 2. 優化問題求解
  • 功能
  • 代碼
  • 3. 線性代數運算
    • 功能
    • 代碼
  • 4. 信號處理
    • 功能
    • 代碼
  • 5. 插值
    • 功能
    • 代碼
  • 6. 統計分析
    • 功能
    • 代碼

1. 數值積分

功能

使用 scipy.integrate 模塊中的函數進行數值積分,例如計算定積分的值。

代碼

import numpy as np
from scipy.integrate import quad# 定義被積函數
def f(x):return x**2# 計算定積分,積分區間為 [0, 1]
result, error = quad(f, 0, 1)
print(f"積分結果: {result}")
print(f"估計誤差: {error}")

在這段代碼中,定義了一個被積函數 f(x) = x**2,然后使用 quad 函數計算該函數在區間 [0, 1] 上的定積分,并輸出積分結果和估計誤差。

2. 優化問題求解

功能

scipy.optimize 模塊可用于求解各種優化問題,如尋找函數的最小值。

代碼

from scipy.optimize import minimize
import numpy as np# 定義目標函數
def rosen(x):return sum(100.0*(x[1:]-x[:-1]**2.0)**2.0 + (1 - x[:-1])**2.0)# 初始猜測值
x0 = np.array([1.3, 0.7, 0.8, 1.9, 1.2])# 求解最小值
res = minimize(rosen, x0, method='nelder-mead',options={'xatol': 1e-8, 'disp': True})
print("最優解:", res.x)

此代碼定義了一個 Rosenbrock 函數作為目標函數,使用 minimize 函數以 Nelder - Mead 方法求解該函數的最小值,并輸出最優解。

3. 線性代數運算

功能

scipy.linalg 模塊提供了許多線性代數運算的功能,如矩陣求逆、特征值分解等。

代碼

import numpy as np
from scipy.linalg import inv, eig# 定義一個矩陣
A = np.array([[1, 2], [3, 4]])# 矩陣求逆
A_inv = inv(A)
print("矩陣的逆:")
print(A_inv)# 特征值分解
eigenvalues, eigenvectors = eig(A)
print("特征值:")
print(eigenvalues)
print("特征向量:")
print(eigenvectors)

代碼中定義了一個矩陣 A,使用 inv 函數求矩陣的逆,使用 eig 函數進行特征值分解,并輸出結果。

4. 信號處理

功能

scipy.signal 模塊可用于信號處理,例如濾波操作。

代碼

import numpy as np
from scipy import signal
import matplotlib.pyplot as plt# 生成一個包含噪聲的信號
t = np.linspace(0, 1, 1000, False)
sig = np.sin(2*np.pi*10*t) + np.sin(2*np.pi*20*t)
noise = 0.5 * np.random.randn(*sig.shape)
noisy_sig = sig + noise# 設計一個低通濾波器
b, a = signal.butter(3, 0.05)# 應用濾波器
filtered_sig = signal.lfilter(b, a, noisy_sig)# 繪制原始信號、含噪聲信號和濾波后的信號
plt.figure(figsize=(10, 6))
plt.subplot(3, 1, 1)
plt.plot(t, sig)
plt.title('Original Signal')
plt.subplot(3, 1, 2)
plt.plot(t, noisy_sig)
plt.title('Noisy Signal')
plt.subplot(3, 1, 3)
plt.plot(t, filtered_sig)
plt.title('Filtered Signal')
plt.tight_layout()
plt.show()

該代碼生成了一個包含噪聲的信號,使用 signal.butter 函數設計了一個低通濾波器,然后使用 signal.lfilter 函數對信號進行濾波操作,并繪制了原始信號、含噪聲信號和濾波后的信號。

5. 插值

功能

scipy.interpolate 模塊可用于數據插值,例如一維插值。

代碼

import numpy as np
from scipy.interpolate import interp1d
import matplotlib.pyplot as plt# 原始數據點
x = np.array([0, 1, 2, 3, 4])
y = np.array([0, 2, 1, 3, 2])# 創建插值函數
f = interp1d(x, y, kind='cubic')# 生成更多的插值點
x_new = np.linspace(0, 4, 100)
y_new = f(x_new)# 繪制原始數據點和插值結果
plt.plot(x, y, 'o', label='Original data')
plt.plot(x_new, y_new, '-', label='Interpolated data')
plt.legend()
plt.show()

代碼中定義了一些原始數據點,使用 interp1d 函數創建了一個三次插值函數,然后生成更多的插值點并繪制原始數據點和插值結果。

6. 統計分析

功能

scipy.stats 模塊提供了豐富的統計分布和統計檢驗功能,例如計算正態分布的概率密度函數值。

代碼

from scipy.stats import norm
import numpy as np
import matplotlib.pyplot as plt# 定義正態分布的參數
mu = 0
sigma = 1# 生成 x 值
x = np.linspace(-5, 5, 100)# 計算正態分布的概率密度函數值
pdf = norm.pdf(x, mu, sigma)# 繪制概率密度函數曲線
plt.plot(x, pdf)
plt.title('Normal Distribution PDF')
plt.xlabel('x')
plt.ylabel('Probability Density')
plt.show()

此代碼定義了一個正態分布的參數,使用 norm.pdf 函數計算該正態分布在一系列 x值上的概率密度函數值,并繪制概率密度函數曲線。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/76108.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/76108.shtml
英文地址,請注明出處:http://en.pswp.cn/web/76108.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

杰弗里·辛頓:深度學習教父

名人說:路漫漫其修遠兮,吾將上下而求索。—— 屈原《離騷》 創作者:Code_流蘇(CSDN)(一個喜歡古詩詞和編程的Coder😊) 杰弗里辛頓:當堅持遇見突破,AI迎來新紀元 一、人物簡介 杰弗…

BladeX單點登錄與若依框架集成實現

1. 概述 本文檔詳細介紹了將BladeX認證系統與若依(RuoYi)框架集成的完整實現過程。集成采用OAuth2.0授權碼流程,使用戶能夠通過BladeX賬號直接登錄若依系統,實現無縫單點登錄體驗。 2. 系統架構 2.1 總體架構 #mermaid-svg-YxdmBwBtzGqZHMme {font-fa…

初識Redis · set和zset

目錄 前言: set 基本命令 交集并集差集 內部編碼和應用場景 zset 基本命令 交集并集差集 內部編碼和應用場景 應用場景(AI生成) 排行榜系統 應用背景 設計思路 熱榜系統 應用背景 設計思路 熱度計算方式 總結對比表 前言&a…

playwright 教程高級篇:掌握網頁自動化與驗證碼處理等關鍵技術詳解

Playwright 教程高級篇:掌握網頁自動化與驗證碼處理等關鍵技術詳解 本教程將帶您一步步學習如何使用 Playwright——一個強大的瀏覽器自動化工具,來完成網頁任務,例如提交鏈接并處理旋轉驗證碼。我們將按照典型的自動化流程順序,從啟動瀏覽器到關閉瀏覽器,詳細講解每個步驟…

數據結構(完)

樹 二叉樹 構建二叉樹 int value;Node left;Node right;public Node(int val) {valueval;} 節點的添加 Node rootnull;public void insert(int num) {Node nodenew Node(num);if(rootnull) {rootnode;return;}Node index root;while(true) {//插入的節點值小if(index.value&g…

FastAPI與SQLAlchemy數據庫集成與CRUD操作

title: FastAPI與SQLAlchemy數據庫集成與CRUD操作 date: 2025/04/16 09:50:57 updated: 2025/04/16 09:50:57 author: cmdragon excerpt: FastAPI與SQLAlchemy集成基礎包括環境準備、數據庫連接配置和模型定義。CRUD操作通過數據訪問層封裝和路由層實現,確保線程安全和事務…

一個基于Django的寫字樓管理系統實現方案

一個基于Django的寫字樓管理系統實現方案 用戶現在需要我用Django來編寫一個寫字樓管理系統的Web版本,要求包括增刪改查寫字樓的HTML頁面,視頻管理功能,本地化部署,以及人員權限管理,包含完整的代碼結構和功能實現&am…

mongodb在window10中創建副本集的方法,以及node.js連接副本集的方法

創建Mongodb的副本集最好是新建一個文件夾,如D:/data,不要在mongodb安裝文件夾里面創建副本集,雖然這樣也可以,但是容易造成誤操作或路徑混亂;在新建文件夾里與現有 MongoDB 數據隔離,避免誤操作影響原有數…

Maven 多倉庫與鏡像配置全攻略:從原理到企業級實踐

Maven 多倉庫與鏡像配置全攻略:從原理到企業級實踐 一、核心概念:Repository 與 Mirror 的本質差異 在 Maven 依賴管理體系中,repository與mirror是構建可靠依賴解析鏈的兩大核心組件,其核心區別如下: 1. Repositor…

STM32 四足機器人常見問題匯總

文章不介紹具體參數,有需求可去網上搜索。 特別聲明:不論年齡,不看學歷。既然你對這個領域的東西感興趣,就應該不斷培養自己提出問題、思考問題、探索答案的能力。 提出問題:提出問題時,應說明是哪款產品&a…

MySQL 中 `${}` 和 `#{}` 占位符詳解及面試高頻考點

文章目錄 一、概述二、#{} 和 ${} 的核心區別1. 底層機制代碼示例 2. 核心區別總結 三、為什么表名只能用 ${}?1. 預編譯機制的限制2. 動態表名的實現 四、安全性注意事項1. ${} 的風險場景2. 安全實踐 五、面試高頻考點1. 基礎原理類問題**問題 1**:**問…

C語言編譯預處理2

#include <XXXX.h>和#include <XXXX.c> #include "XXXX.h" 是 C 語言中一條預處理指令 #include <XXXX.h>&#xff1a;這種形式用于包含系統標準庫的頭文件。預處理器會在系統默認的頭文件搜索路徑中查找XXXX.h 文件。例如在 Linux 系統中&#…

Elasticvue-輕量級Elasticsearch可視化管理工具

Elasticvue一個免費且開源的 Elasticsearch 在線可視化客戶端&#xff0c;用于管理 Elasticsearch 集群中的數據&#xff0c;完全支持 Elasticsearch 版本 8.x 和 7.x. 功能特色&#xff1a; 集群概覽索引和別名管理分片管理搜索和編輯文檔REST 查詢快照和存儲庫管理支持國際…

Git提交規范及最佳實踐

Git 提交規范通常是為了提高代碼提交的可讀性、可維護性和自動化效率&#xff08;如生成 ChangeLog&#xff09;。以下是常見的 Conventional Commits 規范&#xff0c;結合社區最佳實踐總結而成&#xff1a; 1. 提交格式 每次提交的 commit message 應包含三部分&#xff1a;…

Ubuntu中snap

通過Snap可以安裝眾多的軟件包。需要注意的是&#xff0c;snap是一種全新的軟件包管理方式&#xff0c;它類似一個容器擁有一個應用程序所有的文件和庫&#xff0c;各個應用程序之間完全獨立。所以使用snap包的好處就是它解決了應用程序之間的依賴問題&#xff0c;使應用程序之…

android studio 運行java main報錯

運行某個帶main函數的java文件報錯 Could not create task :app:Test.main(). > SourceSet with name main not found. 解決辦法&#xff1a;在工程的.idea/gradle.xml 文件下添加&#xff1a; <option name"delegatedBuild" value"false" /&g…

openssh離線一鍵升級腳本分享(含安裝包)

查看當前的版本 [rootmyoracle ~]#ssh -V相關安裝包下載地址 openssh下載地址&#xff1a;http://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssl下載地址&#xff1a;https://www.openssl.org/source/zlib下載地址&#xff1a;http://www.zlib.net/今天演示從7.4升級…

Mac M1管理多個Node.js版本

目錄 1. 使用 nvm (Node Version Manager) 1.1.安裝 nvm 1.2.安裝Node.js版本 1.3.查看已安裝的node版本列表 1.4.使用特定版本的Node.js 1.5.查看當前使用的版本 2. 使用 fnm (Fast Node Manager) 2.1.安裝 fnm 2.2.安裝Node.js版本 2.3.查看已安裝的版本 2.4.使用…

Unity中國戰略調整簡訊:Unity6下架 團結引擎接棒

Unity中國戰略調整簡訊&#xff1a;Unity6下架 團結引擎接棒 免費版 2025年4月9日 —— Unity中國宣布自即日起&#xff0c;中國大陸及港澳地區停止提供Unity 6及后續版本下載與服務&#xff0c;相關功能由國產引擎“團結引擎”承接。國際版2022 LTS及更早版本仍由Unity中國維護…

TestNG 單元測試詳解

1、測試環境 jdk1.8.0 121 myeclipse-10.0-offline-installer-windows.exe TestNG 插件 org.testng.eclipse 6.8.6.20130607 0745 2、介紹 套件(suite):由一個 XML 文件表示,通過<suite>標簽定義,包含一個或更多測試(test)。測試(test):由<test>定義&#xf…