SciPy,一个超级强大的 Python 库

大家好!我是爱摸鱼的小鸿,关注我,收看每期的编程干货。

一个简单的库,也许能够开启我们的智慧之门,
一个普通的方法,也许能在危急时刻挽救我们于水深火热,
一个新颖的思维方式,也许能激发我们无尽的创造力,
一个独特的技巧,也许能成为我们的隐形盾牌……


神奇的 Python 库之旅,第 11

目录

    • 一、初识 SciPy
    • 二、SciPy 的线性代数模块
    • 三、数值积分
    • 四、优化
    • 五、统计
    • 六、信号处理
    • 七、图像处理
    • 八、总结
    • 九、作者Info

一、初识 SciPy

今天带大家一起来探索一个在数据科学和工程领域中广受欢迎的 Python 第三方库——SciPy。无论你是数据分析师、机器学习工程师,还是科学研究人员,SciPy 都能成为你不可或缺的好帮手。

SciPy(Scientific Python)是一个用于数学、科学和工程的开源 Python 库。它基于 NumPy,提供了许多方便的函数来进行数值计算。今天,我将通过多个代码示例,带你深入了解 SciPy 的强大功能。

在开始使用 SciPy 之前,我们需要先安装它。如果你还没有安装 SciPy,可以使用 pip 命令进行安装:

pip install scipy -i https:/pypi.doubanio.com/simple

接下来,让我们导入 SciPy 并简单了解一下它的基本使用方法:

import scipy
import numpy as np

你可能会好奇,SciPy 到底能做什么?简单来说,SciPy 提供了多种数学运算和科学计算工具,包括线性代数、积分、优化、统计、信号处理等。接下来,我们将逐一探索这些功能。

Github 项目地址:

https://github.com/scipy/scipy

二、SciPy 的线性代数模块

SciPy 的线性代数模块(scipy.linalg)提供了许多常用的线性代数运算,如矩阵分解、求逆、求特征值等。让我们来看几个例子

矩阵求逆
求矩阵的逆在许多数学运算中都非常重要。SciPy 让这变得非常简单:

from scipy.linalg import inv# 创建一个 2x2 的矩阵
A = np.array([[1, 2], [3, 4]])
# 计算矩阵的逆
A_inv = inv(A)
print("A 的逆矩阵:\n", A_inv)

特征值和特征向量
特征值和特征向量在数据分析和机器学习中非常重要。例如,在主成分分析(PCA)中,我们需要计算特征值和特征向量。

from scipy.linalg import eig# 创建一个 2x2 的矩阵
B = np.array([[1, 2], [2, 1]])
# 计算特征值和特征向量
eigenvalues, eigenvectors = eig(B)
print("矩阵 B 的特征值:\n", eigenvalues)
print("矩阵 B 的特征向量:\n", eigenvectors)

三、数值积分

SciPy 的积分模块(scipy.integrate)提供了多种数值积分的方法,包括单重积分、多重积分、常微分方程(ODE)的求解等。下面我们来看几个例子

单重积分
我们可以使用 quad 函数来计算函数的定积分。比如,我们要计算 ∫01𝑒−𝑥2𝑑𝑥:

from scipy.integrate import quad# 被积函数
def integrand(x):return np.exp(-x**2)# 计算定积分
result, error = quad(integrand, 0, 1)
print("积分结果:", result)

多重积分
对于多重积分,SciPy 提供了 dblquad(双重积分)和 tplquad(三重积分)等函数。例如,我们要计算 ∫01∫02𝑥𝑦𝑑𝑥𝑑𝑦:

from scipy.integrate import dblquad# 定义积分上下限和被积函数
result, error = dblquad(lambda y, x: x * y, 0, 1, lambda x: 0, lambda x: 2)
print("双重积分结果:", result)

四、优化

SciPy 的优化模块(scipy.optimize)提供了多种优化算法,包括最小化、最优化、根查找等。让我们来看几个例子

函数最小化
假设我们有一个函数 𝑓(𝑥)=𝑥2+10 sin(𝑥),我们想找到它的最小值:

from scipy.optimize import minimize# 定义目标函数
def objective_function(x):return x**2 + 10 * np.sin(x)# 初始猜测值
x0 = 2# 使用 BFGS 算法寻找最小值
result = minimize(objective_function, x0, method='BFGS')
print("最小值的 x 值:", result.x)
print("最小值:", result.fun)

方程求根
SciPy 提供了 fsolve 函数来求解方程的根。例如,我们要找出方程 𝑥3−1=0的根:

from scipy.optimize import fsolve# 定义方程
def equation(x):return x**3 - 1# 初始猜测值
x0 = 0.5# 求解方程的根
root = fsolve(equation, x0)
print("方程的根:", root)

五、统计

SciPy 的统计模块(scipy.stats)提供了丰富的统计工具,包括概率分布、统计测试、描述统计等。让我们来看几个例子

描述统计
我们可以使用 describe 函数来快速获取数据的描述性统计信息:

from scipy.stats import describe# 生成随机数据
data = np.random.normal(size=1000)# 获取描述性统计信息
description = describe(data)
print("描述性统计信息:", description)

正态性检验
我们可以使用 normaltest 函数来检验数据是否符合正态分布:

from scipy.stats import normaltest# 正态性检验
stat, p_value = normaltest(data)
print("正态性检验的 p 值:", p_value)

六、信号处理

SciPy 的信号处理模块(scipy.signal)提供了丰富的信号处理工具,包括滤波、傅里叶变换、卷积等。让我们来看几个例子:

滤波器设计与应用
我们可以使用 butter 函数来设计一个 Butterworth 滤波器,并使用 filtfilt 函数来应用这个滤波器:

from scipy.signal import butter, filtfilt# 设计一个低通滤波器
b, a = butter(4, 0.2)# 生成随机信号
signal = np.random.randn(100)# 应用滤波器
filtered_signal = filtfilt(b, a, signal)
print("滤波后的信号:", filtered_signal)

快速傅里叶变换(FFT)
我们可以使用 fft 函数来计算信号的快速傅里叶变换:

from scipy.fftpack import fft# 生成一个正弦信号
t = np.linspace(0, 1, 400)
sin_wave = np.sin(2 * np.pi * 50 * t)# 计算 FFT
fft_result = fft(sin_wave)
print("FFT 结果:", fft_result)

七、图像处理

SciPy 的图像处理模块(scipy.ndimage)提供了丰富的图像处理工具,包括图像滤波、形态学变换、几何变换等。让我们来看几个例子

图像滤波
我们可以使用 gaussian_filter 函数来对图像进行高斯滤波:

from scipy.ndimage import gaussian_filter
import matplotlib.pyplot as plt# 生成一个随机图像
image = np.random.random((100, 100))# 应用高斯滤波
filtered_image = gaussian_filter(image, sigma=1)# 显示原图和滤波后的图像
plt.subplot(1, 2, 1)
plt.title("原图")
plt.imshow(image, cmap='gray')
plt.subplot(1, 2, 2)
plt.title("滤波后")
plt.imshow(filtered_image, cmap='gray')
plt.show()

图像旋转
我们可以使用 rotate 函数来对图像进行旋转:

from scipy.ndimage import rotate# 旋转图像
rotated_image = rotate(image, angle=45)# 显示旋转后的图像
plt.imshow(rotated_image, cmap='gray')
plt.title("旋转后")
plt.show()


更多功能、详细用法可参考官方文档:

https://docs.scipy.org/doc/scipy

八、总结

通过这些示例,我们仅仅是触及了 SciPy 库功能的冰山一角。SciPy 的强大功能远远不止这些,涵盖了科学计算的方方面面。无论你是数据科学家、工程师,还是科学研究人员,SciPy 都能为你的工作带来极大的便利。

希望这篇文章能激发你对 SciPy 的兴趣,并鼓励你在自己的项目中尝试使用这个强大的工具。

在这里插入图片描述

九、作者Info

Author:小鸿的摸鱼日常

Goal:让编程更有趣! 专注于 Web 开发、爬虫,游戏开发,数据分析、自然语言处理,AI 等,期待你的关注,让我们一起成长、一起Coding!

版权说明:本文禁止抄袭、转载,侵权必究!

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

React 从入门到实战 一一开发环境基础搭建(小白篇)

React 从入门到实战一一开发环境基础搭建(小白篇) React 介绍什么是 react ?react 主要功能react 框架特点 开发工具渲染测试 React 介绍 最近两年,react 也愈来愈火热,想要在里面分一杯羹,那肯定逃不过 r…

访问控制系列

目录 一、基本概念 1.客体与主体 2.引用监控器与引用验证机制 3.安全策略与安全模型 4.安全内核 5.可信计算基 二、访问矩阵 三、访问控制策略 1.主体属性 2.客体属性 3.授权者组成 4.访问控制粒度 5.主体、客体状态 6.历史记录和上下文环境 7.数据内容 8.决策…

【QGroundControl二次开发】二.使用QT编译QGC(Windows)

【QGroundControl二次开发】一.开发环境准备(Windows) 二. 使用QT编译QGC(Windows) 2.1 打开QT Creator,选择打开项目,打开之前下载的QGC项目源码。 编译器选择Desktop Qt 6.6.3 MSVC2019 64bit。 点击运…

第四章:服务-让客户端发现pod并与之通信

本章内容包括: 创建服务资源,利用单个地址访问一组pod发现集群中的服务将服务公开给外部客户端从集群内部连接外部服务控制pod与服务关联排除服务故障 上一章学习了如何通过ReplicaSet以及类似的资源部署运行pod的事。尽管特定的pod可以独立的应对外部刺…

C++之类与对象(1)

目录 前言 1.类的定义 1.1类定义的格式 1.2访问限定符 1.3类域 1.3.1类定义一个作用域 1.3.2类成员在类的作用域中 1.3.3在类体外定义成员 2.实例化 2.1实例化概念 2.2对象大小 3.this指针 4.选择题补充练习 结束语 前言 Hello,友友们,好久…

使用Python Turtle绘制圣诞树和装饰

简介(❤ ω ❤) 在这篇文章中,我们将探索如何使用Python的Turtle模块来绘制一个充满节日气氛的圣诞树,以及一些可爱的装饰品。Turtle是一个受Logo语言启发的图形库,非常适合初学者学习编程和创建图形。 码农不是吗喽(大学生版&…

SpringBoot以及swagger的基本使用

1、SpringBoot是什么? 一种快速开发、启动Spring的框架、脚手架 遵循“约定优于配置”的思想,使得能够快速创建和配置Spring应用 2、SpringBoot的核心特性 自动配置,一些依赖、默认配置都预设好了,减少了配置量起步依赖&#x…

实现给Nginx的指定站点开启目录浏览功能

一、问题描述 需要实现在浏览器上可以浏览Nginx部署网站内容并下载一些常用的软件安装包、文件资料等内容;并且针对一些文件夹或内容需要进行认证后才能查看;有一些格式类型的文件也不能够访问查看。 二、问题分析 1、实现浏览器上可以浏览下载文件内容; 2、针对一些文件…

Android Studio 不再支持windows 7

Android Studio 一打开就报错: 无法找到入口 无法定位程序输入点 CreateAppContainerProfle 于动态链接库USERENV.dII 上。 截图如下: 经调查,是因为系统版本不兼容。 我目前的电脑环境:windows 7,但是现在的Android Studio要…

四六级词汇小程序的设计

管理员账户功能包括:系统首页,个人中心,用户管理,英语词汇管理,易错词管理,学习笔记管理,签到打卡管理,论坛管理 微信端账号功能包括:系统首页,英语词汇&…

【C++】认识C++(一)

前言 📚作者简介:爱编程的小马,是一名大厂后端c程序员。 📚本文收录于c系列,本专栏主要是分享我所了解的c知识,带领大家慢慢从了解c到认识c,持续更新! 📚本文主要内容&a…

纵向倾斜角、横向倾斜角、全方面监测:输电线路杆塔倾斜在线监测装置

纵向倾斜角、横向倾斜角、全方面监测:输电线路杆塔倾斜在线监测装置 随着我国电网建设的不断加速和电力设施分布范围的扩大,杆塔作为电网的重要组成部分,其安全稳定运行对于保障电力供应具有至关重要的意义。然而,由于地质条件复…

transformer论文讲解

1.标题 作者 Transformer 开创了继 MLP 、CNN和 RN 之后的第四大类模型。200页综述(来自评论区: https://arxiv.org/pdf/2108.07258.pdf )建议将Transformer作为基础模型。 标题:XXX is all you need. 头条标题。 Attention i…

达梦数据库的系统视图v$sqltext

达梦数据库的系统视图v$sqltext 在达梦数据库(DM Database)中,V$SQLTEXT 是一个系统视图,用于显示当前正在执行或最近执行的SQL语句的文本信息。这个视图对于监控和分析数据库中的SQL活动非常有用,尤其是在需要调试性…

C语言 | Leetcode C语言题解之第235题二叉搜索树的最近公共祖先

题目&#xff1a; 题解&#xff1a; struct TreeNode* lowestCommonAncestor(struct TreeNode* root, struct TreeNode* p, struct TreeNode* q) {struct TreeNode* ancestor root;while (true) {if (p->val < ancestor->val && q->val < ancestor-&g…

结构体和联合体的区别

1. 结构体(Struct) 在 C 语言中&#xff0c;结构体是一种自定义的复合数据类型&#xff0c;允许将不同数据类型的变量组合成一个单一的实体。结构体可以包含多个成员&#xff0c;每个成员可以是不同的数据类型&#xff0c;如整数、浮点数、字符、数组等。 结构体的定义通常在函…

【接口自动化_12课_基于Flask搭建MockServer】

知识非核心点,面试题较少。框架搭建的过程中的细节才是面试要点 第三方接口,不方便进行测试, 自己要一个接口去进行模拟。去作为我们项目访问模拟接口。自己写一个接口,需要怎样写 一、flask:轻量级的web应用的框架 安装命令 pip install flask 1、flask-web应用 1)…

Blackbox AI:你的智能编程伙伴

目录 Blackbox AI 产品介绍 Blackbox AI 产品使用教程 Blackbox AI体验 AI问答 代码验证 实时搜索 探索&代理 拓展集成 总结 Blackbox AI 产品介绍 Blackbox是专门为程序员量身定制的语言大模型&#xff0c;它针对20多种编程语言进行了特别训练和深度优化&#xff0c;在AI代…

Qt第十二章 样式表

样式表 文章目录 样式表1.样式表盒子模型 2.选择器选择器类型伪状态选择器Pseudo-State 3.控件示例4继承自QWidget的类&#xff0c;设置qss样式表没有效果&#xff0c;需要重写paintEvent 1.样式表 盒子模型 2.选择器 样式表语法&#xff0c;选择器{属性1:值;属性2:值;}如果只…

七款热门企业数据加密软件推荐|2024年加密软件最新整理出炉!

古言到&#xff1a;“知己知彼&#xff0c;百战不殆。” 当今时代&#xff0c;数据为王&#xff01; 企业数据的保护已成为竞争中的关键一环。 数据加密软件作为守护企业数字资产的利剑&#xff0c;其重要性日益凸显。 2024年&#xff0c;市场上涌现出一批功能强大、特色鲜…