【水了一篇】Scipy简单介绍


1 简介

Scipy是基于Numpy的科学计算库,用于数学、科学、工程学等领域,很多有一些高阶抽象和物理模型需要使用Scipy。SciPy包含的模块有最优化、线性代数、积分、插值、特殊函数、快速傅里叶变换、信号处理和图像处理、常微分方程求解和其他科学与工程中常用的计算。

使用之前需要正确安装scipy模块,我使用的是anaconda的jupyter notebook,已内置scipy,不需要再进行安装。示例代码如下:

>>> from scipy import constants
>>> print(constants.acre) #输出一英亩为多少平方米
4046.8564223999992

以下列出了SciPy常用的一些模块:

模块名功能
scipy.cluster向量量化
scipy.constants数学常量
scipy.fft快速傅里叶变换
scipy.integrate积分
scipy.interpolate插值
scipy.io数据输入输出
scipy.linalg线性代数
scipy.misc图像处理
scipy.ndimageN维图像
scipy.odr正交距离回归
scipy.optimize优化算法
scipy.signal信号处理
scipy.sparse稀疏矩阵
scipy.spatial空间数据结构和算法
scipy.special特殊数学函数
scipy/stats统计函数

2 常量模块

SciPy常量模块constants提供了许多内置的数学常数。以下实例输出圆周率:

>>> from scipy import constants
>>> constants.pi
3.141592653589793

以下实例输出黄金比例:

>>> constants.golden
1.618033988749895

可用dir()函数来查看constants模块包含了哪些常量:

>>> dir(constants)
['Avogadro', 'Boltzmann', 'Btu', 'Btu_IT', 'Btu_th', 'ConstantWarning', 'G', 'Julian_year', 'N_A', 'Planck', 'R', 'Rydberg', 'Stefan_Boltzmann', 'Wien', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', '_obsolete_constants', 'acre', 'alpha', 'angstrom', 'arcmin', 'arcminute', 'arcsec', 'arcsecond', 'astronomical_unit', 'atm', 'atmosphere', 'atomic_mass', 'atto', 'au', 'bar', 'barrel', 'bbl', 'blob', 'c', 'calorie', 'calorie_IT', 'calorie_th', 'carat', 'centi', 'codata', 'constants', 'convert_temperature', 'day', 'deci', 'degree', 'degree_Fahrenheit', 'deka', 'dyn', 'dyne', 'e', 'eV', 'electron_mass', 'electron_volt', 'elementary_charge', 'epsilon_0', 'erg', 'exa', 'exbi', 'femto', 'fermi', 'find', 'fine_structure', 'fluid_ounce', 'fluid_ounce_US', 'fluid_ounce_imp', 'foot', 'g', 'gallon', 'gallon_US', 'gallon_imp', 'gas_constant', 'gibi', 'giga', 'golden', 'golden_ratio', 'grain', 'gram', 'gravitational_constant', 'h', 'hbar', 'hectare', 'hecto', 'horsepower', 'hour', 'hp', 'inch', 'k', 'kgf', 'kibi', 'kilo', 'kilogram_force', 'kmh', 'knot', 'lambda2nu', 'lb', 'lbf', 'light_year', 'liter', 'litre', 'long_ton', 'm_e', 'm_n', 'm_p', 'm_u', 'mach', 'mebi', 'mega', 'metric_ton', 'micro', 'micron', 'mil', 'mile', 'milli', 'minute', 'mmHg', 'mph', 'mu_0', 'nano', 'nautical_mile', 'neutron_mass', 'nu2lambda', 'ounce', 'oz', 'parsec', 'pebi', 'peta', 'physical_constants', 'pi', 'pico', 'point', 'pound', 'pound_force', 'precision', 'proton_mass', 'psi', 'pt', 'short_ton', 'sigma', 'slinch', 'slug', 'speed_of_light', 'speed_of_sound', 'stone', 'survey_foot', 'survey_mile', 'tebi', 'tera', 'test', 'ton_TNT', 'torr', 'troy_ounce', 'troy_pound', 'u', 'unit', 'value', 'week', 'yard', 'year', 'yobi', 'yotta', 'zebi', 'zepto', 'zero_Celsius', 'zetta']

常量模块包含以下几种单位:公制单位,二进制,以字节为单位,质量单位,角度换算,时间单位,长度单位,压强单位,体积单位,速度单位,温度单位,能量单位,功率单位,力学单位等。

国际单位制词头:(英语:SI prefix)表示单位的倍数和分数,目前有20个词头,大多数是千的整数次幂。如:

kilo103
deci10-1
micro10-6
centi10-2
>>> constants.kilo
1000.0
>>> constants.deci
0.1
>>> constants.micro
1e-06
>>> constants.centi
0.01

二进制前缀:返回字节单位。如:

kibi210
mebi220
gibi230
>>> constants.kibi
1024
>>> constants.mebi
1048576

质量单位:返回多少千克kg。如:

>>> constants.gram #1克
0.001
>>> constants.metric_ton #1吨
1000.0
>>> constants.pound #1磅
0.45359236999999997

角度单位:返回弧度。

>>> constants.degree #π/180
0.017453292519943295

时间单位:返回秒数。

>>> constants.minute
60.0
>>> constants.hour
3600.0

长度单位:返回米数。

>>> constants.inch #英寸
0.0254
>>> constants.mile #英里
1609.3439999999998

面积单位:返回多少平方米,平方米是面积的公制单位,其定义是:在一平面上,边长为一米的正方形之面积。

>>> constants.acre #英亩
4046.8564223999992
>>> constants.hectare #公顷
10000.0

体积单位:返回多少立方米,立方米是容量计量单位,1立方米的容量相当于一个长、宽、高都等于1米的立方体的体积。

>>> constants.gallon #加仑
0.0037854117839999997

速度单位:返回每秒多少米。 #音速

>>> constants.speed_of_sound
340.5

3 优化器

SciPy的optimize模块提供了常用的最优化算法函数实现,可以直接调用这些函数完成某些优化问题,比如查找函数的最小值或方程的根等。NumPy能够找到多项式和线性方程的根,但它无法找到非线性方程的根,如x+cos(x)。可以使用SciPy的optimze.root函数,这个函数需要两个参数:

  • fun-表示方程的函数。
  • x0-根的初始猜测。

该函数返回一个对象,其中包含有关解决方案的信息。实际解决方案在返回对象的属性x,查看如下实例,查找x+cos(x)方程的根:

>>> from scipy.optimize import root
>>> from math import cos
>>> def eqn(x):
...     return x+cos(x)
...
>>> myroot=root(eqn,0)
>>> myroot.x
array([-0.73908513])
>>> myroot
    fjac: array([[-1.]])
     fun: array([0.])
 message: 'The solution converged.'
    nfev: 9
     qtf: array([-2.66786593e-13])
       r: array([-1.67361202])
  status: 1
 success: True
       x: array([-0.73908513])

可以使用scipy.optimize.minimize()函数来最小化函数,这里不详细介绍,请看这里


4 稀疏矩阵

稀疏矩阵(英语:sparse matrix)指的是在数值分析中绝大多数数值为零的矩阵。反之,如果大部分元素都非零,则这个矩阵是稠密的(Dense)。
在这里插入图片描述
上述稀疏矩阵仅包含9个非零元素,另外包含26个零元。SciPy的scipy.sparse模块提供了处理稀疏矩阵的函数。主要使用以下两种类型的稀疏矩阵:

  • CSC-压缩稀疏列(Compressed Sparse Column),按列压缩。
  • CSR-压缩稀疏行(Compressed Sparse Row),按行压缩。

本节主要使用CSR矩阵。通过向scipy.sparse.csr_matrix()函数传递数组来创建一个CSR矩阵:

>>> import numpy as np
>>> from scipy.sparse import csr_matrix
>>> arr=np.array([0,0,0,0,0,1,1,0,2])
>>> print(csr_matrix(arr))
  (0, 5)        1
  (0, 6)        1
  (0, 8)        2

结果解析:

第一行:在矩阵第一行(索引值0)第六(索引值5)个位置有一个数值1。
第二行:在矩阵第一行(索引值0)第七(索引值6)个位置有一个数值1。
第三行:在矩阵第一行(索引值0)第九(索引值8)个位置有一个数值2。

用data属性查看存储的数据(不含0元素):

>>> arr=np.array([[0,0,0],[0,0,1],[1,0,2]])
>>> arr
array([[0, 0, 0],
       [0, 0, 1],
       [1, 0, 2]])
>>> csr_matrix(arr).data
array([1, 1, 2], dtype=int32)

用count_nonzero()方法计算非0元素的总数:

>>> arr=np.array([[0,0,0],[0,0,1],[1,0,2]])
>>> csr_matrix(arr).count_nonzero()
3

5 图结构

图是各种关系的节点和边的集合,节点是与对象对应的顶点,边是对象之间的连接。SciPy提供了scipy.sparse.csgraph模块来处理图结构。

用scipy模块可以对图使用:

1、dijkstra最短路径算法;

2、floyd算法;

3、bellman ford算法;

4、dfs、bfs算法等图算法。

这里不详细介绍,请看这里


6 空间数据

空间数据又称几何数据,它用来表示物体的位置、形态、大小分布等各方面的信息,比如坐标上的点。SciPy通过scipy.spatial模块处理空间数据,比如判断一个点是否在边界内、计算给定点周围距离最近点以及给定距离内的所有点。

这里不详细介绍,请看这里

还有【matlab数组】、【插值】、【显著性检验】,估计用不到,就不整理了。


END

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值