热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Python科学计算Scipy

文章目录一、Scipy基础介绍1.1常数包1.2特殊函数包二、Scipy优化2.1理论基础2.2⭐最小二乘法(leastsq)2.3函数最小值(fmin)2.4非线性方程组求解(f

文章目录

  • 一、Scipy基础介绍
    • 1.1 常数包
    • 1.2 特殊函数包
  • 二、Scipy优化
    • 2.1 理论基础
    • 2.2 ⭐最小二乘法(leastsq)
    • 2.3 函数最小值(fmin)
    • 2.4 非线性方程组求解(fsolve)
    • 2.5 实现最小二乘法
    • 2.6 实现梯度下降法
  • 三、Scipy插值
  • 四、线性代数和数值积分
    • 4.1 线性代数
      • 4.1.1 噪声消除
    • 4.2 数值积分
    • 4.3 ⭐实战-svd分解对图像压缩
  • 五、信号处理与傅里叶变换
    • 5.1 信号处理
    • 5.2 傅里叶变换




一、Scipy基础介绍

常用包
在这里插入图片描述

1.1 常数包

from scipy import constants as C

在这里插入图片描述
在这里插入图片描述

1.2 特殊函数包

在这里插入图片描述
在这里插入图片描述

四舍五入:scipy与numpy有些不同

在这里插入图片描述

具体使用:help(special)查看更多使用方法

在这里插入图片描述



二、Scipy优化

2.1 理论基础

简单线性回归

在统计学中,线性回归是利用称为线性回归方程的最小二乘函数对一个或多个自变量和因变量之间关系进行建模的一种回归分析。这种函数是一个或多个称为回归系数的模型参数的线性组合。一个带有一个自变量的线性回归方程代表一条直线。我们需要对线性回归结果进行统计分析。


最小二乘法(又称最小平方法)是一种数学优化技术。它通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 最优化问题
    在这里插入图片描述
    在这里插入图片描述
  • 最小二乘法

通过求导来确定最小值
这里的未知数是a,b

在这里插入图片描述
在这里插入图片描述

2.2 ⭐最小二乘法(leastsq)

在这里插入图片描述

  • 可视化
    在这里插入图片描述
    在这里插入图片描述

2.3 函数最小值(fmin)


求偏差函数最小值


  • 函数最小值
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 梯度下降法

类似于走山坡:若你发现你往上走则掉头往下;反之,若是往下走,则继续走
此外还有牛顿法、共轭下降法[抽象不懂,不在此展开陈述]

在这里插入图片描述
在这里插入图片描述

2.4 非线性方程组求解(fsolve)

在这里插入图片描述

2.5 实现最小二乘法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.6 实现梯度下降法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、Scipy插值

拟合 插值:都是想得到某种模型的特性曲线
拟合不要求通过所有点,样本数据量比较大的时候
插值要求必须过所有点,适合数量比较少的时候,同时我们暂时还不知道用什么曲线去拟合
现在所讲插值只能对样本数据点中间的值进行插值:例如 原始数据0-10 只能对0-10之间进行插值

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 二维插值
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述



四、线性代数和数值积分

4.1 线性代数


SciPy.linalg与NumPy.linalg
scipy.linalg包含numpy.linalg中的所有函数。 另外,scipy.linalg还有一些不在numpy.linalg中的高级函数。 在numpy.linalg上使用scipy.linalg的另一个优点是它总是用BLAS/LAPACK支持编译,而对于NumPy,这是可选的。 因此,根据NumPy的安装方式,SciPy版本可能会更快。//原文出自【易百教程】,商业转载请联系作者获得授权,非商业请保留原文链接:https://www.yiibai.com/scipy/scipy_linalg.html
点击跳转

from scipy import linalg
import numpy as np

在这里插入图片描述
在这里插入图片描述

  • svd分解

  • 图像压缩
  • 噪声消除

在这里插入图片描述

  • 奇异矩阵

奇异矩阵是线性代数的概念,就是该矩阵的秩不是满秩。
首先,看这个矩阵是不是方阵(即行数和列数相等的矩阵,若行数和列数不相等,那就谈不上奇异矩阵和非奇异矩阵)。然后,再看此矩阵的行列式|A|是否等于0,若等于0,称矩阵A为奇异矩阵;若不等于0,称矩阵A为非奇异矩阵。 同时,由|A|≠0可知矩阵A可逆,这样可以得出另外一个重要结论:可逆矩阵就是非奇异矩阵,非奇异矩阵也是可逆矩阵。 如果A为奇异矩阵,则AX=0有无穷解,AX=b有无穷解或者无解。如果A为非奇异矩阵,则AX=0有且只有唯一零解,AX=b有唯一解。

在这里插入图片描述

  • 正交矩阵
    在这里插入图片描述
    在这里插入图片描述
  • 对角矩阵

对角矩阵(diagonal matrix)是一个主对角线之外的元素皆为0的矩阵,常写为diag(a1,a2,…,an) 。对角矩阵可以认为是矩阵中最简单的一种,值得一提的是:对角线上的元素可以为 0 或其他值,对角线上元素相等的对角矩阵称为数量矩阵;对角线上元素全为1的对角矩阵称为单位矩阵。对角矩阵的运算包括和、差运算、数乘运算、同阶对角阵的乘积运算,且结果仍为对角阵。
在这里插入图片描述


4.1.1 噪声消除

在这里插入图片描述
在这里插入图片描述

4.2 数值积分


  • 一维
    在这里插入图片描述
  • 二维
    在这里插入图片描述
    在这里插入图片描述

4.3 ⭐实战-svd分解对图像压缩


进行svd的图像的shape是不变的,但是为什么可以压缩呢?
是PNG这种图片格式进行压缩
png图片压缩原理解析
【数据压缩】LZ77算法原理及实现


  • 导入库
    在这里插入图片描述

misc模块,提供一些基本的图像相关的读写函数,可以很轻松的读取本地图像文件到Python程序里,也可将数据输出到图像文件。misc模块自带一些灰度图像ascent和彩色的face图,可以scipy.misc.ascent()直接获取爬楼梯ascent图数据到Python程序里,用scipy.misc.face()获取一副 raccoon浣熊face图,这两个函数的返回值都是Numpy的ndarray数组face图像是个彩色图像,其数据是个三维数组,是个1024x768的图像,而图像中每个像素的值又是一个数组,分别对应该像素颜色的红、绿、蓝分量。ascent图像是个灰度图像,其数据是个二维数组,分别对应图像中每个像素的灰度值。

在这里插入图片描述
在这里插入图片描述

  • svd分解
    在这里插入图片描述

# 原始图像
plt.gray()
# subplot是将多个图画到一个平面上的工具
# 221 两行两列 第一张图
plt.subplot(221,aspect='equal')
plt.title('orignal')
plt.imshow(gray)
plt.imsave('org.png',gray) #保存# 取奇异特征值前10个主成分压缩的图像
A = np.dot(U[:,:10],np.dot(np.diag(s[:10]),Vh[:10,:]))
plt.subplot(222,aspect='equal')
plt.title(':10')
plt.imshow(A)
plt.imsave('a10.png',A) #将压缩后的数组保存为PNG格式# 取前50个主成分压缩的图像
B = np.dot(U[:,:50],np.dot(np.diag(s[:50]),Vh[:50,:]))
plt.subplot(223,aspect='equal')
plt.title(':50')
plt.imshow(B)
plt.imsave('b50.png',B) #将压缩后的数组保存为PNG格式# 取前100个主成分压缩的图像
C = np.dot(U[:,:100],np.dot(np.diag(s[:100]),Vh[:100,:]))
plt.subplot(224,aspect='equal')
plt.title(':100')
plt.imshow(C)
plt.imsave('c100.png',C) #将压缩后的数组保存为PNG格式 plt.show()# png格式是无损压缩

**subplot(m,n,p)**或者subplot(mnp)此函数最常用:subplot是将多个图画到一个平面上的工具。其中,m表示是图排成m行,n表示图排成n列,也就是整个figure中有n个图是排成一行的,一共m行,如果第一个数字是2就是表示2行图。p是指你现在要把曲线画到figure中哪个图上,最后一个如果是1表示是从左到右第一个位置。 )
在这里插入图片描述


  • 效果展示 无损压缩
    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

五、信号处理与傅里叶变换

5.1 信号处理


设计滤波器,怎样从噪声中,拿到真正的信号


  • 理想信号
    在这里插入图片描述

真实的测量基本不会是理想的信号,难免会有噪声的出现


  • 加入噪声
    在这里插入图片描述

噪声过大,导致原始噪声无法辨别


  • 调整噪声
    在这里插入图片描述

噪声来源:传感器测量、环境、温度、震动等

我们要做的是将噪声弱化,恢复到平滑的

  • 中值滤波器 低通滤波器
    在这里插入图片描述
    • 奇数太大:

选取合适的数值

在这里插入图片描述

  • 对原始清晰的图像进行中值滤波会使图像变模糊
    在这里插入图片描述
    在这里插入图片描述
  • 对原始清晰的图像加上噪声 再进行中值滤波
    在这里插入图片描述

在这里插入图片描述

5.2 傅里叶变换

在这里插入图片描述

周期的方波信号可以由无限个奇次信号叠加生成


  • 实例
    在这里插入图片描述

时域图 --> FFT --> 频域图
振幅、周期、相移和频率

在这里插入图片描述

  • 实例 分析复杂信号
    在这里插入图片描述
    在这里插入图片描述


# 总结
python tolist()方法

>>> from numpy import *
>>> a1 = [[1,2,3],[4,5,6]] #列表
>>> a2 = array(a1) #a2数组
>>> a2
array([[1, 2, 3],[4, 5, 6]])
# mat()函数将目标数据的类型转化成矩阵(matrix)
>>> a3 = mat(a1) #矩阵
>>> a3
matrix([[1, 2, 3],[4, 5, 6]])
>>> a4 = a2.tolist()
>>> a4
[[1, 2, 3], [4, 5, 6]]
>>> a5 = a3.tolist()
>>> a5
[[1, 2, 3], [4, 5, 6]]
>>> a4 == a5
True

问题:python tolist()方法
解决:
在这里插入图片描述
在这里插入图片描述


推荐阅读
  • XNA 3.0 游戏编程:从 XML 文件加载数据
    本文介绍如何在 XNA 3.0 游戏项目中从 XML 文件加载数据。我们将探讨如何将 XML 数据序列化为二进制文件,并通过内容管道加载到游戏中。此外,还会涉及自定义类型读取器和写入器的实现。 ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • PHP 5.5.0rc1 发布:深入解析 Zend OPcache
    2013年5月9日,PHP官方发布了PHP 5.5.0rc1和PHP 5.4.15正式版,这两个版本均支持64位环境。本文将详细介绍Zend OPcache的功能及其在Windows环境下的配置与测试。 ... [详细]
  • PyCharm下载与安装指南
    本文详细介绍如何从官方渠道下载并安装PyCharm集成开发环境(IDE),涵盖Windows、macOS和Linux系统,同时提供详细的安装步骤及配置建议。 ... [详细]
  • 探讨如何高效使用FastJSON进行JSON数据解析,特别是从复杂嵌套结构中提取特定字段值的方法。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • CentOS7源码编译安装MySQL5.6
    2019独角兽企业重金招聘Python工程师标准一、先在cmake官网下个最新的cmake源码包cmake官网:https:www.cmake.org如此时最新 ... [详细]
  • 本文深入探讨 MyBatis 中动态 SQL 的使用方法,包括 if/where、trim 自定义字符串截取规则、choose 分支选择、封装查询和修改条件的 where/set 标签、批量处理的 foreach 标签以及内置参数和 bind 的用法。 ... [详细]
  • 360SRC安全应急响应:从漏洞提交到修复的全过程
    本文详细介绍了360SRC平台处理一起关键安全事件的过程,涵盖从漏洞提交、验证、排查到最终修复的各个环节。通过这一案例,展示了360在安全应急响应方面的专业能力和严谨态度。 ... [详细]
  • 本文探讨了如何在模运算下高效计算组合数C(n, m),并详细介绍了乘法逆元的应用。通过扩展欧几里得算法求解乘法逆元,从而实现除法取余的计算。 ... [详细]
  • 深入理解Java泛型:JDK 5的新特性
    本文详细介绍了Java泛型的概念及其在JDK 5中的应用,通过具体代码示例解释了泛型的引入、作用和优势。同时,探讨了泛型类、泛型方法和泛型接口的实现,并深入讲解了通配符的使用。 ... [详细]
  • 本文详细记录了在银河麒麟操作系统和龙芯架构上使用 Qt 5.15.2 进行项目打包时遇到的问题及解决方案,特别关注于 linuxdeployqt 工具的应用。 ... [详细]
  • 本文介绍如何使用JPA Criteria API创建带有多个可选参数的动态查询方法。当某些参数为空时,这些参数不会影响最终查询结果。 ... [详细]
  • 本文介绍了如何使用JQuery实现省市二级联动和表单验证。首先,通过change事件监听用户选择的省份,并动态加载对应的城市列表。其次,详细讲解了使用Validation插件进行表单验证的方法,包括内置规则、自定义规则及实时验证功能。 ... [详细]
author-avatar
手机用户2502934681
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有