Python教程:进击机器学习(五)--Scipy《转》
Scipy简介
Scipy是一个高级的科学计算库,它和Numpy联系很密切,Scipy一般都是操控Numpy数组来进行科学计算,所以可以说是基于Numpy之上了。Scipy有很多子模块可以应对不同的应用,例如插值运算,优化算法、图像处理、数学统计等。
以下列出Scipy的子模块:
| 模块名 | 功能 |
|---|---|
| scipy.cluster | 向量量化 |
| scipy.constants | 数学常量 |
| scipy.fftpack | 快速傅里叶变换 |
| scipy.integrate | 积分 |
| scipy.interpolate | 插值 |
| scipy.io | 数据输入输出 |
| scipy.linalg | 线性代数 |
| scipy.ndimage | N维图像 |
| scipy.odr | 正交距离回归 |
| scipy.optimize | 优化算法 |
| scipy.signal | 信号处理 |
| scipy.sparse | 稀疏矩阵 |
| scipy.spatial | 空间数据结构和算法 |
| scipy.special | 特殊数学函数 |
| scipy.stats | 统计函数 |
文件输入和输出:scipy.io
这个模块可以加载和保存matlab文件:
>>> from scipy import io as spio
>>> a = np.ones((3, 3))
>>> spio.savemat('file.mat', {'a': a}) # 保存字典到file.mat
>>> data = spio.loadmat('file.mat', struct_as_record=True)
>>> data['a']
array([[ 1., 1., 1.],
[ 1., 1., 1.],
[ 1., 1., 1.]])
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
.关于这个模块的文档:https://docs.scipy.org/doc/scipy/reference/io.html#module-scipy.io
线性代数操作:scipy.linalg
假如我们要计算一个方阵的行列式,我们需要调用det()函数:
>>> from scipy import linalg
>>> arr = np.array([[1, 2],
... [3, 4]])
>>> linalg.det(arr)
-2.0
>>> arr = np.array([[3, 2],
... [6, 4]])
>>> linalg.det(arr)
0.0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
比如求一个矩阵的转置:
>>> arr = np.array([[1, 2],
... [3, 4]])
>>> iarr = linalg.inv(arr)
>>> iarr
array([[-2. , 1. ],
[ 1.5, -0.5]])
- 1
- 2
- 3
- 4
- 5
- 6
更多关于scipy.linalg.
快速傅里叶变换:scipy.fftpack
https://blog.csdn.net/q583501947/article/details/76735870
首先我们用numpy初始化正弦信号:
>>> import numpy as np
>>> time_step = 0.02
>>> period = 5.
>>> time_vec = np.arange(0, 20, time_step)
>>> sig = np.sin(2 * np.pi / period * time_vec) + \
... 0.5 * np.random.randn(time_vec.size)
- 1
- 2
- 3
- 4
- 5
- 6
如果我们要计算该信号的采样频率,可以用scipy.fftpack.fftfreq()函数,计算它的快速傅里叶变换使用scipy.fftpack.fft():
>>> from scipy import fftpack
>>> sample_freq = fftpack.fftfreq(sig.size, d=time_step)
>>> sig_fft = fftpack.fft(sig)
- 1
- 2
- 3
Numpy中也有用于计算快速傅里叶变换的模块:numpy.fft
但是scipy.fftpack是我们的首选,因为应用了更多底层的工具,工作效率要高一些。关于scipy.fftpack更多文档。
优化器:scipy.optimize
scipy.optimize通常用来最小化一个函数值,我们举个栗子:
构建一个函数并绘制函数图:
>>> def f(x):
... return x**2 + 10*np.sin(x)
>>> x = np.arange(-10, 10, 0.1)
>>> plt.plot(x, f(x))
>>> plt.show()
- 1
- 2
- 3
- 4
- 5

如果我们要找出这个函数的最小值,也就是曲线的最低点。就可以用到BFGS优化算法(Broyden–Fletcher–Goldfarb–Shanno algorithm):
>>> optimize.fmin_bfgs(f, 0)
Optimization terminated successfully.
Current function value: -7.945823
Iterations: 5
Function evaluations: 24
Gradient evaluations: 8
array([-1.30644003])
- 1
- 2
- 3
- 4
- 5
- 6
- 7
可以得到最低点的值为-1.30644003,optimize.fmin_bfgs(f, 0)第二个参数0表示从0点的位置最小化,找到最低点(该点刚好为全局最低点)。假如我从3点的位置开始梯度下降,那么得到的将会是局部最低点 3.83746663:
>>> optimize.fmin_bfgs(f, 3, disp=0)
array([ 3.83746663])
- 1
- 2
假如你无法选出the global minimum的邻近点作为初始点的话可以使用scipy.optimize.basinhopping(),具体就不展开描述。关于这个模块的其他功能,参考scipy.optimize
统计工具:scipy.stats
首先我们随机生成1000个服从正态分布的数:

>>> a = np.random.normal(size=1000)
#用stats模块计算该分布的均值和标准差。
>>> loc, std = stats.norm.fit(a)
>>> loc
0.0314345570...
>>> std
0.9778613090...
#中位数
>>> np.median(a)
0.04041769593...
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
这个工具还是蛮好用的,更多参考:scipy.stats
还有像scipy的其他模块(计算积分、信号处理、图像处理的模块)就不一一介绍了。其实机器学习最基础的部分还是属于一些统计算法和优化算法。对这一部分还有兴趣继续了解的,戳这里:https://docs.scipy.org/doc/scipy/reference/index.html
Python中关于科学计算的工具就介绍到这里。
Ref:http://www.scipy-lectures.org/intro/scipy.html
https://blog.csdn.net/q583501947/article/details/76735870
Python教程:进击机器学习(五)--Scipy《转》的更多相关文章
- python 教程 第十五章、 结构布局
第十五章. 结构布局 #!/usr/bin/env python #(1)起始行 "this is a module" #(2)模块文档 import sys #(3)模块导入 d ...
- 超过 150 个最佳机器学习,NLP 和 Python教程
超过 150 个最佳机器学习,NLP 和 Python教程 微信号 & QQ:862251340微信公众号:coderpai简书地址:http://www.jianshu.com/p/2be3 ...
- 入门系列之Scikit-learn在Python中构建机器学习分类器
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由信姜缘 发表于云+社区专栏 介绍 机器学习是计算机科学.人工智能和统计学的研究领域.机器学习的重点是训练算法以学习模式并根据数据进行预 ...
- 《简明python教程》笔记一
读<简明Python教程>笔记: 本书的官方网站是www.byteofpython.info 安装就不说了,网上很多,这里就记录下我在安装时的问题,首先到python官网下载,选好安装路 ...
- Python教程百度网盘哪里有?
Python为我们提供了非常完善的基础代码库,覆盖了网络.文件.GUI.数据库.文本等大量内容,被形象地称作"内置电池(batteries included)".带你快速入门的Py ...
- 2017最新的Python教程分享
Python在数据科学盛行的今天,其易于阅读和编写的特点,越来越受编程者追捧.在IEEE发布的2017年编程语言排行榜中,Python也高居首位.如果你有学Python的计划,快来看看小编分享的Pyt ...
- 简明Python教程自学笔记——命令行通讯录
[前言]学习Python已经有一段时间了,相关的书籍资料也下载了不少,但是没有一本完整的看完,也没有编出一个完整的程序.今天下午比较清闲就把<简明Python教程>看了一遍,然后根据书里面 ...
- 如何用Python实现常见机器学习算法-1
最近在GitHub上学习了有关python实现常见机器学习算法 目录 一.线性回归 1.代价函数 2.梯度下降算法 3.均值归一化 4.最终运行结果 5.使用scikit-learn库中的线性模型实现 ...
- Python中的Numpy、SciPy、MatPlotLib安装与配置
Python安装完Numpy,SciPy和MatplotLib后,可以成为非常犀利的科研利器.网上关于这三个库的安装都写得非常不错,但是大部分人遇到的问题并不是如何安装,而是安装好后因为配置不当,在使 ...
- 孤荷凌寒自学python第四十五天Python初学基础基本结束的下阶段预安装准备
孤荷凌寒自学python第四十五天Python初学基础基本结束的下阶段预安装准备 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 今天本来应当继续学习Python的数据库操作,但根据过去我自 ...
随机推荐
- C++解析十-数据封装
数据封装 所有的 C++ 程序都有以下两个基本要素: 程序语句(代码):这是程序中执行动作的部分,它们被称为函数. 程序数据:数据是程序的信息,会受到程序函数的影响.封装是面向对象编程中把数据和操作数 ...
- Oracle获取当前年、月、日的方法
Oracle获取当前年.月.日的方法 Oracle 获取当前年.月.日 1.//oracle中extract()函数从oracle 9i中引入,用于从一个date或者interval类型中截取到特定的 ...
- LeetCode 总结,二叉树各种类型问题小结
三大遍历 前序遍历 中序遍历 后序遍历 关于三大基础遍历,必须要条件反射式的记住:三种遍历的迭代方式使用的都是栈,后序遍历必须使用了 两个栈,其余乱七八糟的解决方式统统就不要再记了. 广度遍历: 分析 ...
- Linux 搭建Hadoop集群 ----workcount案例
在 Linux搭建集群---JDK配置 Linux搭建集群---SSH免密登陆 Linux搭建集群---集群搭建成功 的基础上实现workcount案例 注意 虚拟机三台启动集群(自己亲自搭建) 1. ...
- mybatis oracle:批量操作(增删改查)
此文主要是讲mybatis在连接oracle数据库时的一些批量操作,请各位对号入座 (最后回来补充一下,所有都是在Spring+MVC的框架下实现的) 不废话,上代码: 1.批量插入(网上很多,是针对 ...
- centos 解决中文支持问题, 如此修改可以修正eclipse 乱码问题。
一.中文支持 安装中文语言包: yum groupinstall chinese-support 修改字符编码配置,没有这个文件就创建它: vim /etc/sysconfig/i18n 为 LANG ...
- python面向对象的基础语法(dir内置函数、self参数、初始化方法、内置方法和属性)
面相对象基础语法 目标 dir 内置函数 定义简单的类(只包含方法) 方法中的 self 参数 初始化方法 内置方法和属性 01. dir 内置函数(知道) 在 Python 中 对象几乎是无所不在的 ...
- Visual Studio Code--开发大大们都在用的编辑器
老公推荐的炒鸡nb的编辑器...说让我看起来像个假大神(微笑脸) 如何用VSCode练习python呢,还有VSCode有哪些常用的功能和快捷键呢?我会持续更新中... 1. 先来换个喜欢的颜色主题吧 ...
- java类的高级概念
- Markup解析XML——文档,说明
链接:http://pan.baidu.com/s/1slMwEc9 密码:slz7 上面是网盘的地址,因为来源已经找不到了,在这里给这个作者说声谢谢. 轻量级的XML解析器使用比较简单,下载Mark ...