热门标签 | 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()方法
解决:
在这里插入图片描述
在这里插入图片描述


推荐阅读
  • 在软件开发过程中,经常需要将多个项目或模块进行集成和调试,尤其是当项目依赖于第三方开源库(如Cordova、CocoaPods)时。本文介绍了如何在Xcode中高效地进行多项目联合调试,分享了一些实用的技巧和最佳实践,帮助开发者解决常见的调试难题,提高开发效率。 ... [详细]
  • 技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统
    技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统 ... [详细]
  • 如何将TS文件转换为M3U8直播流:HLS与M3U8格式详解
    在视频传输领域,MP4虽然常见,但在直播场景中直接使用MP4格式存在诸多问题。例如,MP4文件的头部信息(如ftyp、moov)较大,导致初始加载时间较长,影响用户体验。相比之下,HLS(HTTP Live Streaming)协议及其M3U8格式更具优势。HLS通过将视频切分成多个小片段,并生成一个M3U8播放列表文件,实现低延迟和高稳定性。本文详细介绍了如何将TS文件转换为M3U8直播流,包括技术原理和具体操作步骤,帮助读者更好地理解和应用这一技术。 ... [详细]
  • Coviam 实习软件工程师的工作体验与成长 ... [详细]
  • Android 构建基础流程详解
    Android 构建基础流程详解 ... [详细]
  • 使用 ListView 浏览安卓系统中的回收站文件 ... [详细]
  • 在《Cocos2d-x学习笔记:基础概念解析与内存管理机制深入探讨》中,详细介绍了Cocos2d-x的基础概念,并深入分析了其内存管理机制。特别是针对Boost库引入的智能指针管理方法进行了详细的讲解,例如在处理鱼的运动过程中,可以通过编写自定义函数来动态计算角度变化,利用CallFunc回调机制实现高效的游戏逻辑控制。此外,文章还探讨了如何通过智能指针优化资源管理和避免内存泄漏,为开发者提供了实用的编程技巧和最佳实践。 ... [详细]
  • 类加载机制是Java虚拟机运行时的重要组成部分。本文深入解析了类加载过程的第二阶段,详细阐述了从类被加载到虚拟机内存开始,直至其从内存中卸载的整个生命周期。这一过程中,类经历了加载(Loading)、验证(Verification)等多个关键步骤。通过具体的实例和代码示例,本文探讨了每个阶段的具体操作和潜在问题,帮助读者全面理解类加载机制的内部运作。 ... [详细]
  • 在本地环境中调试远程服务器上的网站代码执行问题,可以通过以下步骤实现:首先,在本地安装 Visual Studio 并配置远程调试工具。接着,确保服务器和本地机器之间的网络连接畅通,并正确设置防火墙规则以允许调试流量。最后,使用 Visual Studio 的远程调试功能连接到服务器,进行代码调试。这种方法不仅提高了开发效率,还减少了在服务器上直接操作的风险。 ... [详细]
  • Swoole加密机制的安全性分析与破解可能性探讨
    本文深入分析了Swoole框架的加密机制,探讨了其在实际应用中的安全性,并评估了潜在的破解可能性。研究结果表明,尽管Swoole的加密算法在大多数情况下能够提供有效的安全保护,但在特定场景下仍存在被攻击的风险。文章还提出了一些改进措施,以增强系统的整体安全性。 ... [详细]
  • 如何在Python中配置库并创建可视化对象:详细指南与实践步骤
    本文详细介绍了如何在Python中配置库并创建复杂的可视化对象。通过具体的实践步骤,读者将学会利用Python的强大功能来实现高度定制化的数据可视化,特别是在PowerBI环境中,Python能够显著提升可视化的灵活性和表现力。 ... [详细]
  • 本文将继续探讨 JavaScript 函数式编程的高级技巧及其实际应用。通过一个具体的寻路算法示例,我们将深入分析如何利用函数式编程的思想解决复杂问题。示例中,节点之间的连线代表路径,连线上的数字表示两点间的距离。我们将详细讲解如何通过递归和高阶函数等技术实现高效的寻路算法。 ... [详细]
  • 能够感知你情绪状态的智能机器人即将问世 | 科技前沿观察
    本周科技前沿报道了多项重要进展,包括美国多所高校在机器人技术和自动驾驶领域的最新研究成果,以及硅谷大型企业在智能硬件和深度学习技术上的突破性进展。特别值得一提的是,一款能够感知用户情绪状态的智能机器人即将问世,为未来的人机交互带来了全新的可能性。 ... [详细]
  • TypeScript 实战分享:Google 工程师深度解析 TypeScript 开发经验与心得
    TypeScript 实战分享:Google 工程师深度解析 TypeScript 开发经验与心得 ... [详细]
  • 传奇手游智能辅助脚本能够显著提升玩家的游戏体验,通过自动打怪功能实现高效升级。该脚本利用先进的算法和技术,确保在游戏过程中自动完成战斗任务,帮助玩家节省大量时间和精力。此外,脚本还具备智能路径规划和资源管理功能,进一步优化游戏进程,使玩家能够更加轻松地达到目标等级。 ... [详细]
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社区 版权所有